【发布时间】:2015-07-30 20:05:48
【问题描述】:
我最近在 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,所以 1->1000 意味着 matlab 每次都必须扩展数组,而 1000->1 则预先构建 1000为您提供项目数组。 -
@MarcB 没错。将其发布为答案!
-
一直更快?你用什么来计时?
-
@MarcB MATLAB 甚至会对此发出警告,不知道为什么 OP 没有阅读它。
-
阅读?这是什么?如果阅读变得流行,那么 90% 以上的关于 SO 的问题将是多余的......