MATLAB tic toc的Mathematica等效实现及整段代码计时问题
在Mathematica中为整段代码计时的方法
Mathematica的AbsoluteTiming完全支持为整段多行代码计时,只需将代码作为一个整体传入即可,以下是几种常用方法:
1. 直接用括号包裹整段代码
将需要计时的所有代码放在一对括号内,作为AbsoluteTiming的参数:
AbsoluteTiming[ (* 你的整段测试代码 *) a = Table[RandomReal[], {1000}, {1000}]; b = MatrixExp[a]; c = Total[Flatten[b]] ]
返回结果是一个列表:第一个元素是代码运行的总时间(单位:秒),第二个元素是代码的最终返回值。
2. 用Module/Block封装代码(隔离变量)
如果需要避免测试代码中的变量污染全局环境,可以用Module或Block包裹代码后再计时:
AbsoluteTiming[ Module[{a, b, c}, a = Table[RandomReal[], {1000}, {1000}]; b = MatrixExp[a]; c = Total[Flatten[b]]; c ] ]
3. 兼容旧版本的Timing函数
对于较旧版本的Mathematica,可以使用Timing函数,用法和AbsoluteTiming一致,只是时间精度稍低:
Timing[ (* 整段测试代码 *) a = Table[RandomReal[], {1000}, {1000}]; b = MatrixExp[a]; c = Total[Flatten[b]] ]
进阶:多次运行取平均(提升测试准确性)
和MATLAB中多次运行取平均的思路一致,通过循环多次计时并计算平均值,可以减少单次运行的误差:
nRuns = 5; runTimes = Table[ First[AbsoluteTiming[ (* 测试代码 *) a = Table[RandomReal[], {1000}, {1000}]; MatrixExp[a]; Total[Flatten[%]] ]], {nRuns} ]; Mean[runTimes]
内容的提问来源于stack exchange,提问作者Fernando Chueca
相关产品推荐
相关产品推荐

