运行结果
tCost for mycode1: 0.12879980000070645
tCost for mycode2: 0.7638708999984374
tCost for mycode3: 0.05968639999991865
这个例子比较了python内置的math.sqrt()函数与numpy.sqrt()的运行速度差异。
令人意外的是 以标量形式进行运算的话 numpy.sqrt()竟然比math.sqrt()还要慢很多 此种必有蹊跷 回头再另行调查。
4. timeit.repeat()调用方式 timeit.repeat(stmt, setup, timer, number, repeat)
Timeit.repeat()在timeit.timeit()的基础上又追加了一个repeat参数 用于指定重复次数。
老实讲 不明白为什么 把number*repeat设定给number然后调用timeit.timeit()有什么不好吗 不过 当然必须相信库开发者这样设计总是有它的道理的。搜了一艘 查到这么一个帖子
what is diffrence between number and repeat in python timeit? - Stack Overflow
虽然隐约觉得明白了一些 但是还是不足以以自己的语言来解释一番 就不“为赋新词强说愁”了 等理解透彻并且自信能够解释清楚后再回来补课。先看例子吧
# Example3, timeit.repeat() print( nExample3: ... ) mysetup3 from math import sqrt def example3(N): mylist [] for k in range(N): mylist.append(sqrt(k)) mycode3 example3(1000) print( tCost for mycode3: , timeit.repeat(setup mysetup3, stmt mycode3, number 1000, repeat 100) )
运行结果
Example3: ...
tCost for mycode3: [0.12954869999884977, 0.13357629999882192, 0.1325503000007302, 0.1383346000002348, 0.13686260000031325, 0.1361642000010761, 0.13500720000229194, 0.1356378999989829, 0.13645919999908074, 0.1313538000031258]
与timeit.timeit只给出一个结果不同的是 timeit.repeat()将每次repeat看作是一次独立的统计 总共给出的repeat指定次数的结果。基于这repeat个样本数据可以方便进行更深入的统计分析 比如说最大值、最小值、均值、标准差、直方图等等等等blabla。。。 超出了本文的范围 就此打住
以上例子中还顺便还给出将待评估的代码 如果多行的话 封装为一个函数 从setup参数中导入 然后在stmt中值导入对函数的调用 提供了更进一步的灵活性。
5. 命令行使用比如说 在Anacondaprompt(当然其它命令行终端应该也是一样 只要能运行python就行)执行以下命令
python -m timeit -s from math import sqrt -n 10000 -r 10 x sqrt(12345678)
其中 -m是用于指定模块名 -s, -n, -r则分别对应timeit.repeat()函数的setup, number和repeat参数 最后的’’中的代码即是对应stmt参数的指定内容了。
此外在IPython环境下还可以用一下魔术命令的方式调用timeit:
import numpy as np
%timeit np.sqrt(123456789)
运行结果
705 ns ± 2.66 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
另外关于python中的time模块的使用方法 请参考 Python运行时间评估: time modulehttps://blog.csdn.net/chenxy_bwave/article/details/119458690



