在 matlab 中添加许多大矩阵的更快方法

faster way to add many large matrix in matlab

假设我有很多(大约 1000 个)大矩阵(大约 1000 x 1000)并且我想按元素将它们相加。非常天真的方法是使用临时变量并在循环中累积。例如,

summ=0;
for ii=1:20
    for jj=1:20
    summ=summ+ rand(400);
    end
end

在网上查了一段时间,有人说还是借助sum()比较好。例如,

sump=zeros(400,400,400);
count=0;
for ii=1:20
    for j=1:20
        count=count+1;
        sump(:,:,count)=rand(400);
    end
end
sum(sump,3);

但是,我测试了两种方式后,结果是

Elapsed time is 0.780819 seconds.
Elapsed time is 1.085279 seconds.

这意味着第二种方法更糟糕。

所以我想知道有没有什么有效的加法方法?假设我在一台内存非常大和 GTX 1080 的计算机上工作(CUDA 可能会有帮助,但我不知道这样做是否值得,因为通信也需要时间。)

感谢您的宝贵时间!任何答复将不胜感激!

最快的方法是在 matlab 中完全不使用任何循环。 在许多情况下,matlab 的内部函数都经过优化以使用 SIMD 或其他加速技术。 使用内置功能创建所需大小的矩阵的示例是 X = rand(sz1,...,szN)。 在你的明确情况下 sum(rand(400,400,400),3) 应该给你最快的结果。