为什么在matlab中反向循环更快

时间:2015-07-30 20:05:48

标签: python matlab loops

我最近在MATLAB中遇到了这个用于循环代码的问题让我感到困惑,因为反向循环更快地做同样的事情。为什么会这样?

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中使用范围(1000,1,-1)执行相同操作并找到相同的结果(反向循环仍然更快)。

2 个答案:

答案 0 :(得分:4)

由于在反向顺序中没有预先分配输出变量c,因此在第一次for循环迭代之后,c最初被预先分配到1000 x 1000矩阵。当你计算c每个循环的大小增加时,这需要在每次迭代时重新分配内存,因此速度较慢。如果你打开它们,Matlab会将此显示为警告。

答案 1 :(得分:2)

反向循环更快,因为第一次迭代(c(1000,1000)=..)创建一个大小为1000x1000的数组,而第一段代码不断增加变量c的大小。

要避免此类问题,请预先分配您在循环中编写的变量。插入c=zeros(1000,1000),两个版本都可以快速运行。您的matlab编辑器会显示警告(黄线),表示潜在的性能问题以及代码的其他问题。阅读这些消息!