非常多的matlab小矩阵的快速合并

非常多的matlab小矩阵的快速合并,matlab,performance,matrix,merge,Matlab,Performance,Matrix,Merge,我需要合并大约5000万个小Matlab矩阵。使用下面这样的脚本似乎永远不会结束。有没有更快的办法?如果速度更快,我愿意尝试非Matlab路线 main_data_a = zeros(10000000, 3); main_data_b = zeros(10000000, 3); main_data_c = ones(10000000, 1); for i=1:1:10000000 try to_load=sprintf('data/output%d.mat',i);

我需要合并大约5000万个小Matlab矩阵。使用下面这样的脚本似乎永远不会结束。有没有更快的办法?如果速度更快,我愿意尝试非Matlab路线

main_data_a = zeros(10000000, 3);
main_data_b = zeros(10000000, 3);
main_data_c = ones(10000000, 1);
for i=1:1:10000000
    try
        to_load=sprintf('data/output%d.mat',i);
        load(to_load);
    catch

    end;
    if sum(a) ~= 0 
        main_data_a(i,:) = a;
        main_data_b(i,:) = b;
        main_data_c(i,:) = c;
    end;
end;

下面是显示“parfor”用法的完整示例

上述代码导致我的机器上出现以下计时

Using for-loop
Elapsed time is 32.792182 seconds.
Using parfor-loop
Elapsed time is 7.673821 seconds.

但是,如果在for(或parfor)循环体中执行一些简单的计算,那么“for循环”的运行速度比“parfor”快。例如,如果替换
tmpData(i)=max(max(eig(i*ones(100100)))
tmpData(i)=i然后您可以看到for循环的性能更好。

您是否预先分配了
main_data
?在每一次迭代中增加它将是非常昂贵的!是的,很好,我已经编辑了它来反映这一点。你可以做的另一件事是使用那些数组的转置。填充列应该比填充行快。除此之外,要有耐心。下次用其他方式保存数据。;)试试看。它将根据计算机上可用内核的数量加快速度。@dothypendt,是的,它将保留顺序,因为
i
用作加载内容和矩阵中位置的标识符。尽管例如output10.mat不一定在output12.mat之前加载。
Using for-loop
Elapsed time is 32.792182 seconds.
Using parfor-loop
Elapsed time is 7.673821 seconds.