【发布时间】:2016-12-18 13:05:01
【问题描述】:
我有以下一段代码,它通过两个嵌套的for-loops,中间有一个if 条件:
N=1e4;
cond_array = [0:(N/2-1) -N/2+(0:(N/2-1))]/(N);
condition = 0.1;
arr_one = zeros(N, 1);
arr_two = zeros(N, 1);
for m=1:N
for k=1:N
if(abs(cond_array(k)) <= condition)
arr_one(m) = arr_one(m) + m*k;
else
arr_two(m) = arr_two(m) + m*k;
end
end
end
我想优化此代码,因为我可能需要使用非常大的 N (>1e4),并且根据我自己的经验,MATLAB 中的 for-loops 通常非常消耗 CPU 并且效率不高.
有没有办法优化这段代码,也许是通过使用适用于整个数组的向量化函数?
【问题讨论】:
-
arr_one = (1:N)*sum(find(abs(cond_array) <= condition))和arr_two类似? -
优化工作代码实际上是Code review的目的,所以像这样的问题在这里非常受欢迎! :)
标签: matlab for-loop optimization