我最近在 MATLAB 中遇到了这个 for 循环代码,这让我感到困惑,因为反向循环可以更快地完成同样的事情。为什么会这样?
clear all
a = rand(1000,1000);
b = rand(1000,1000);
for i=1:1000
for j=1:1000
c(i,j) = a(i,j) + b(i,j);
end
end
以及带有反向循环的相同代码:
clear all
a = rand(1000,1000);
b = rand(1000,1000);
for i=1000:-1:1
for j=1000:-1:1
c(i,j) = a(i,j) + b(i,j);
end
end
我在 python 中用 range(1000,1,-1) 做了同样的事情,发现了相同的结果(反向循环仍然更快)。
请您参考如下方法:
由于您没有预分配输出变量 c 当您以相反的顺序进行时 c 最初在第一次 for 循环迭代后被预分配给 1000 x 1000 矩阵。当您计算 c 的大小时,每个循环都需要在每次迭代中重新分配内存,因此速度较慢。如果您打开它们,Matlab 会将其显示为警告。
