我有一个包含abs([imaginary])的大循环
我花了很多时间来完成这个项目
我尝试了多种其他方法来计算abs(),例如当C是虚数时,(real(C)^ 2 + imag(C)^ 2)。^。5。
该结果与abs(C)相同
当我使用tic,toc时,(real(C)^ 2 + imag(C)^ 2)。^。5略快。所以我替换并再次运行它。
然而,个人资料显示,当我有abs()时,速度要快得多
怎么会发生这种情况,怎样才能使abs(C)过程更快?
答案 0 :(得分:1)
我从你的评论中得到你正在使用大循环的评论,matlab并不那么高效,例如:
test = randn(10000000,2);
testC = complex(test(:,1),test(:,2));
%%vector
tic
foo = abs(testC);
toc
%%loop
bar = zeros(size(foo));
tic
for i=1:10000000
bar(i) = abs(testC(i));
end
toc
给你类似
的东西Elapsed time is 0.106635 seconds.
Elapsed time is 0.928885 seconds.
这就是为什么我建议在循环外计算abs()。如果完全替换循环是没有选项,则只能在部件中执行此操作。例如,你可以使用循环,直到得到所有复数,结束循环,计算abs()然后用这些结果开始一个新的循环。此外,如果循环的每次迭代都与其他迭代结果无关,那么您可能希望查看parfor
作为for
的替代 - 循环