Matlab for 循环速度取决于迭代器声明

问题描述 投票:0回答:2

我测试了这两种循环迭代器变量的方法,我想知道为什么性能如此不同。唯一的区别是范围的声明,首先在单独的变量中,最后直接在循环中。

clear all;

tic 
a = 1:1:1e6;
b = 0;
for i = a
    b = b + i;
end
toc


tic
c = 0;
for j = 1:1:1e6
    c = c + j;
end
toc

第一种方法的经过时间约为 0.012 秒,第二种方法的经过时间约为 0.003 秒。

我正在使用 Matlab R2021a。

performance loops matlab
2个回答
3
投票

差异可能是由于第一个版本创建了数组

1:1:1e6
,而第二个版本则没有。 当前文档对此并不清楚,但是在命令窗口中输入
help for
会告诉你(在R2024a上测试;重点是我的)

出现冒号表达式时,长循环内存效率更高 在

for
语句中,因为 从未创建索引向量

您还可以在Loren Shure 的博客文章中阅读相关内容。

顺便说明一下,使用

tic
toc
并不是计时代码的最佳方法。使用timeit
更好


0
投票

当我致力于优化 MATLAB 脚本时,我注意到以两种不同方式循环迭代器变量时性能存在显着差异。为了更好地理解这一点,我联系了www.matlabassignmentexpert.com。他们的团队详细解释了为什么第二种方法(直接在循环中声明范围)运行速度更快。他们强调了 MATLAB 中内存分配和高效编码实践的重要性,而我自己是无法掌握这一点的。他们的见解不仅帮助我优化了代码,还加深了我对 MATLAB 性能细微差别的理解。如果您遇到困难或需要专家建议,我强烈建议您拨打 +1 (315) 557-6473 或发送电子邮件至 [email protected] 与他们联系。它们确实是任何 MATLAB 相关挑战的救星!

© www.soinside.com 2019 - 2024. All rights reserved.