当我在MatLab中执行这些等效操作时,第一个运行时间为24.158371秒(for循环)。第二次运行在0.004976秒(逻辑索引)。 MatLab可能会做些什么让这个运行速度更快?这仍然是O(n)时间,对吧?这为什么这么快?
t = linspace(-2*pi,2*pi,100000);
fd = 1e3;
tau = 1e-6;
% Calculate arbitrary function using a loop
tic
for tind = 1:length(t)
tester(tind) = cos(2*pi*fd*t(tind))/(2*pi*fd.*t(tind));
end
toc
pause; disp('Press a key');
% Same calculation with logical indexing
tic
tester2 = cos(2*pi*fd.*t)./(2*pi*fd.*t);
toc
您的第一个循环代表了与第二个循环相同的更高层次的方法;即脚本看起来并不是最优化的。 – ThomasRS 2011-04-08 01:02:25
这证实了Matlab循环吸吮的事实,如果有任何使用矩阵的方法,应该避免像瘟疫一样。 – Reinderien 2011-04-08 01:10:25
@Reinderien - 不,你错了。循环中的问题是,tind从未被预分配。所以发生的每一次都是通过循环,数组tind必须在内存中重新分配。 – 2011-04-08 11:10:58