我已经注意到,结果在具有常规间隔的运行timeit和参数number = 1的timeit之间快速变化。这是我找到的示例。
import sympy as sp
import numpy as np
var = (sp.Symbol("x"), sp.Symbol("y"), sp.Symbol("z"))
x,y,z = var[0], var[1], var[2]
monos = np.array([1, z, y, x, z**2, y*z, y**2, x*z, x*y, x**2, z**3, y*z**2, y**2*z, y**3, x*z**2, x*y*z, x*y**2, x**2*z, x**2*y, x**3, z**4, y*z**3, y**2*z**2, y**3*z, y**4, x*z**3, x*y*z**2, x*y**2*z, x*y**3, x**2*z**2, x**2*y*z, x**2*y**2, x**3*z, x**3*y, x**4])
f = sp.lambdify(var, monos)
import testit
timeit.timeit("(f(2,3,4))", setup="from __main__ import f")
#returns 2.0760600566864014
timeit.timeit("(f(2,3,4))", setup="from __main__ import f", number=1)
#returns 1.5974044799804688e-05
我正在使用python2版本2.7.12和sympy版本1.2。这是怎么回事?
答案 0 :(得分:0)
与IPython%timeit不同,timeit.timeit
返回所有运行所花费的总时间。要获得单个跑步的时间,您必须除以数字。您还可以使用timeit.Timer(stmt).autorange()
(仅适用于Python 3.6+),它会自动选择运行次数。
我建议使用IPython %timeit
进行计时。它只能以交互方式工作,但是比标准库中的timeit
模块更容易使用。