在搜索如何避免在我的 Matlab 代码中使用循环的想法时,我在SE上一个问题下找到了以下评论:
自从Matlab...嗯,R2008a以来,“for循环在Matlab中速度很慢”这一说法不再普遍适用。
和
你是否尝试过对比已有的向量化代码和for循环?有时候for循环会更快...
因此我想问,有没有常用的方法可以测试 Matlab 中进程的速度?用户是否可以在某个地方看到进程所需的时间,还是唯一的方式是将进程延长几分钟以便比较它们之间的时间?
在搜索如何避免在我的 Matlab 代码中使用循环的想法时,我在SE上一个问题下找到了以下评论:
自从Matlab...嗯,R2008a以来,“for循环在Matlab中速度很慢”这一说法不再普遍适用。
和
你是否尝试过对比已有的向量化代码和for循环?有时候for循环会更快...
因此我想问,有没有常用的方法可以测试 Matlab 中进程的速度?用户是否可以在某个地方看到进程所需的时间,还是唯一的方式是将进程延长几分钟以便比较它们之间的时间?
>> profile on; % Starts the profiler
>> myfunctiontorun( ); % This can be a function, script or block of code
>> profile viewer; % Opens the viewer showing you how much time everything took
查看器还会清除当前的配置文件数据,以备下次使用。
请记住,配置文件可能会使执行速度变慢一些,但我相信它会在所有方面以统一的方式做到这一点。
显然,如果您的函数非常快,您可能会发现无法获得可靠的结果,因此如果您可以多次运行它或扩展计算,那么将改善情况。
如果要测试的内容非常简单,您还可以使用 tic
和 toc
来计时:
>> tic; % Start the timer
>> myfunctionname( );
>> toc; % End the timer and display elapsed time
如果您需要多个计时器,可以将它们分配给变量:
>> mytimer = tic;
>> myfunctionname( );
>> toc(mytimer);
最后,如果你想储存经过的时间而不是显示它:
>> myresult = toc;
tic
和toc
将我们感兴趣的代码块包装起来。此外,我们会注意确保总时间是几十秒的数量级(而不是1秒或100秒),并重复3-5次,并采取某些中心趋势度量(如平均值)并从中得出结论。
timeit
的功能也很容易(我指的是文件交换版而非新版本内置版,但是它们应该很相似)。只需要输入edit timeit
查看函数的内部,你会看到它对函数进行多次运行,然后调用median
函数。只需修改timeit
以输出每个时间,你就可以采取任何形式的平均值或标准差了。 - Sam Roberts