时间与数字和时间与数字之间的不一致

时间:2018-08-21 19:28:41

标签: python numpy sympy timeit

我已经注意到,结果在具有常规间隔的运行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。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

与IPython%timeit不同,timeit.timeit返回所有运行所花费的总时间。要获得单个跑步的时间,您必须除以数字。您还可以使用timeit.Timer(stmt).autorange()(仅适用于Python 3.6+),它会自动选择运行次数。

我建议使用IPython %timeit进行计时。它只能以交互方式工作,但是比标准库中的timeit模块更容易使用。