-1

我目前正在研究一个 100000 行和 100000 列的稀疏矩阵“A”。

我正在尝试使用它来计算使用该graphshortestpath函数的所有节点之间的最短路径。

我需要将每个节点的路径存储在一个变量中以供以后计算。

目前对于较小的数据集,我可以使用这些命令集来实现这一点

pathoutput=cell(70,70);
for i=1:70
    for j=1:70
        [dist1,path1,pred1]=graphshortestpath(A,i,j,'Method','Bellman-Ford');
        pathoutput{i,j}=path1;
        save('test.mat','pathoutput');
        disp(pathoutput);
    end
end

假设如果在我的路径结果中,对于节点 1,它只有值 7,而在其他结果中是 [723 6 1 2025],我该如何保存 100000 行和 100000 列的结果?

但是,Cell array 似乎并不支持如此庞大的数据。

如果我设置pathoutput=cell(100000,100000)我会收到一条错误消息。

使用单元格时出错 超出程序允许的最大变量大小。

您能否提出一种替代方法来实现这一目标。

谢谢你。

4

1 回答 1

0

您可以使用matfile函数直接在文件中读取/写入数据。因此,100 GB 由您的硬盘驱动器而非 RAM 管理。

下面是一些代码,展示了如何读取、写入和附加单元格。

A = {1:3, 2, 0
     0  , 5, 8};
save('A.mat', 'A','-v7.3');
clear A

matObj = matfile('A.mat','Writable',true);
matObj.A(1,2) = {[2 2]};       %modify one cell
matObj.A(3,3) = {[10 10 10]};  %append one isolated cell  => creates empty cells 
matObj.A(4,:) = {1, 1, 2};     %append a full row

disp(matObj.A)

这给

A = 

    [1x3 double]    [2]    [0]
    [         0]    [5]    [8]

matObj.A = 

    [1x3 double]    [1x2 double]    [         0]
    [         0]    [         5]    [         8]
              []              []    [1x3 double]
    [         1]    [         1]    [         2]

以这种方式进行读取

%read
matObj = matfile('A.mat');
loadedData = matObj.A(1,1);

它给

加载数据 =

[1x3 double]
于 2013-09-19T12:39:57.903 回答