【发布时间】:2013-01-11 23:23:11
【问题描述】:
我对执行某些数组操作的代码有疑问。它变得太慢了,因为我正在使用循环。我正在尝试一段时间来优化这段代码,并用更少或没有循环来重写它。直到现在都没有成功。你能帮我解决这个问题吗:
YVal = 1:1:100000;
M_MAX = 1000;
N_MAX = 2000;
clear YTemp
tic
for M=1:1:M_MAX
for N = 1:1:N_MAX
YTemp(M,N) = sum(YVal (N+1:N+M) ) - sum(YVal (1:M) );
end
end
对于大的N_MAX 和M_MAX,这两个循环的执行时间非常长。我该如何优化它?
谢谢!
【问题讨论】:
-
最耗时的部分是在循环内增长
YTemp。将clear YTemp替换为YTemp = zeros(M_MAX,N_MAX),您会看到已经非常不错的速度提升了。 -
@Jonas - 说得好!您能否详细说明一下 Matlab 中预分配的重要性,并将其作为另一个答案发布在这里 - 我会为此 +1 !
标签: matlab loops optimization for-loop matrix