个人功能和整个程序的速度

时间:2016-03-14 15:15:01

标签: performance matlab

我有一个包含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)过程更快?

1 个答案:

答案 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的替代 - 循环