15

我想测试两个相同列表之间的处理时间,特别是普通列表和 numpy 列表。我的代码是

import timeit
import numpy as np

t = timeit.Timer("range(1000)")
print t.timeit()

u = timeit.Timer("np.arange(1000)")
print u.timeit()

计算t很好,但uNameError: global name 'np' is not defined 被列出。

我应该如何编码以获得处理时间?

4

3 回答 3

16

该类timeit.Timer可以以两种不同的方式使用。

它可以将源代码编译并执行——在这种情况下,代码在只setup运行代码的新环境中执行,或者它可以采用可调用对象,在这种情况下,可调用对象只是被调用(在你的当前环境,就像任何其他可调用的)。

所以,你有两个选择:

u = timeit.Timer("np.arange(1000)", setup='import numpy as np')

……或者……</p>

u = timeit.Timer(lambda: np.arange(1000))

在第一种情况下,你碰巧做了一个事实import numpy as np是无关紧要的;它对np.arange(1000)编译和执行的环境没有影响(因此您必须将其包含setup=...在位中)。

在第二种情况下,您执行 an 的事实import numpy as np显然相关的——它会影响您的代码(包括lambda: np.arange(1000))被评估的环境。

于 2014-01-19T11:57:06.620 回答
5

使用setup参数:

u = timeit.Timer("np.arange(1000)", setup='import numpy as np')
于 2014-01-19T11:39:20.960 回答
4

要使用导入的库,timeit您必须使用setup关键字参数 ( docs ) 导入它们:

import timeit

# Doesn't require setup kwarg as range doesn't need to be imported.
t = timeit.Timer("range(1000)")
print t.timeit()

# Requires the import of numpy (as np) through the setup kwarg.
u = timeit.Timer("np.arange(1000)", setup = 'import numpy as np')
print(u.timeit())

setup关键字参数允许您设置代码,例如导入外部库或通过使用from __main__ import func.

于 2014-01-19T11:39:27.720 回答