我已经在MATLAB中编写了一个函数。在该函数中,我使用:
t = cputime;
...
time = cputime-t;
我在点上有一些操作。每当我不调用该函数而是手动运行该函数中的代码时,我总会得到时间= 0.15等。
但是,在另一个脚本中,我正在调用相同的函数。在第一个电话中,它再次给了我时间= 0.15。但是,如果我清空工作区并再次调用该函数,则我的时间=0。只有0,没有小数。我不知道为什么,因为该功能可以正常工作并提供我想要的东西。 如果我改为多次运行函数中的代码,则我永远不会有时间=0。
可能的问题是什么?为什么即使清除了工作空间,也多次从脚本调用一个函数会使它变为0秒?
答案 0 :(得分:3)
您应该始终使用函数timeit
来计时代码。其他任何事情充其量都是不准确的。
timeit
首先“预热”系统,然后重复运行代码以准确估算其花费的时间。
当要执行的代码很短时,使用cputime
或tic
/ toc
会导致测量不精确。时钟的分辨率不足以正确地对其进行测量(这就是为什么您可以看到0而不是一个很小的数字)的原因,并且同时受到计算机中其他事物影响的测量结果。 / p>
最后,MATLAB使用JIT(即时)编译器。第一次执行函数时,将解析并编译函数中的代码。随后,只需重复使用已编译的代码,即可运行得更快。
在这方面,我不清楚函数和脚本M文件之间的区别。过去的情况是脚本不是JIT编译的,只有函数是。但是我怀疑这在最新版本的MATLAB中可能已经改变。在任何情况下,直接键入或复制/粘贴到命令提示符中的内容都不是JIT编译的,因此,它总是和第一次运行函数时一样慢。
当您执行clear all
时,会从内存中清除预加载和预编译的代码,从而使后续代码的运行速度变慢。通常,您不应该使用clear all
。要清除变量,只需执行clear
。