gpt4 book ai didi

performance - 带/不带循环的 Matlab 性能

转载 作者:行者123 更新时间:2023-12-02 07:28:06 25 4
gpt4 key购买 nike

我读过THIS评论 SO Matlab 在 for 循环中不再慢(c.f. link)。

我在学习期间经常使用 Matlab,我记得通过始终找到不涉及过多循环的解决方案(通过使用 reshaperepmatarrayfun)。

所以上面这篇文章引起了我的注意,我很快写下了这个:

clear all; T = linspace(0,1,1e6);
tic
i = 0;
for t = T
i = i + 1; y(i) = sin(t);
end
toc

clear all; T = linspace(0,1,1e6);
tic
i = 0;
y = zeros(numel(T), 1);
for t = T
i = i + 1; y(i) = sin(t);
end
toc

clear all; T = linspace(0,1,1e6);
tic
y = sin(T);
toc

输出这个:

Elapsed time is 1.741640 seconds.
Elapsed time is 1.400412 seconds.
Elapsed time is 0.004076 seconds.

我还尝试切换 accel 功能...

>feature accel on

但每次,即使对于更复杂的矩阵操作,使用原生 Matlab 函数的矢量化版本总是更快。

也许我遗漏了一些重要的观点,或者我的观点仍然是正确的:对于 Matlab,我们应该始终尽可能避免循环。

现在,我正在寻找一个反例。

最佳答案

问题是不同的人认为“慢”是什么。

当 MATLAB for 循环从“慢得令人难以置信”到“比矢量化版本慢 8 倍”时,将会有

  1. 有些人惊呼:“哇,MATLAB 在循环上不再慢了!”
  2. 其他人说“MATLAB 在使用循环时变得更好。仍然不好,但可以忍受。”
  3. 有些人发现“好吧,8 倍仍然是一个严重的减速。一路矢量化”
  4. 最后得出的结论是:“C 仍然更快,即使在矢量化代码上也是如此。MATLAB 只是没有削减它。”

在我看来,MATLAB 在循环方面仍然很慢(猜猜我是第三组),您应该尽可能进行矢量化(除非可读性受到影响)。仅仅因为它在过去更慢,并不能使当前的性能更好。

此外,MATLAB 还有其他一些弱点:https://stackoverflow.com/a/17933146/1974021

关于performance - 带/不带循环的 Matlab 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com