如何从%timeit -o返回结果中获取耗时测量的标准差
提取%timeit测量结果的标准差数值
%timeit -o 返回的TimeitResult结果对象本身就内置了标准差属性,和你读取平均耗时的用法完全一致,不需要额外计算:
- 平均耗时读取:
result_py.average,单位为秒,对应终端输出的mean值 - 标准差读取:
result_py.stdev,单位为秒,对应终端输出的std. dev.值
直接执行以下代码就能拿到你要的标准差:
print(result_py.stdev)
结合你给出的运行输出样例,这个属性的返回值约为0.00298,和终端显示的2.98 ms数值完全匹配。
如果你的IPython版本较老,没有暴露顶层stdev属性,可以通过对象存储的原始运行数据手动计算,逻辑如下:
result_py.all_runs是列表结构,存储了所有重复轮次的运行总耗时,轮次数量对应输出中7 runs的7,单位为秒result_py.loops是整数,代表每一轮运行中重复调用目标函数的次数,对应输出中1 loop each的1- 先把每一轮的总耗时换算成单轮单函数调用的平均耗时,再对这个耗时序列计算标准差即可,参考代码:
import statistics # 换算每轮的单调用耗时 per_run_loop_cost = [run_total / result_py.loops for run_total in result_py.all_runs] # 计算标准差 calc_stdev = statistics.stdev(per_run_loop_cost) print(calc_stdev)
内容的提问来源于stack exchange,提问作者Ryo Matsuzaka
相关产品推荐
相关产品推荐

