以下是我为测试numba而编写的一些代码
import time
from numba import autojit
@autojit
def triple_count(num):
start = time.time()
count=0.0
r=range(num)
for i in r:
for j in r:
for k in r:
count += i*j*k
runtime=time.time()-start
rate=num/runtime
print "%0.4f seconds" % runtime
print "rate : %0.3f per second" % rate
print "count: %s" % count
@autojit被注释掉的结果
2.3796 seconds
rate : 126.073 per second
count: 9.0216784125e+13
使用@autojit时的结果
0.0000 seconds
rate : 8065969.231 per second
count: 0.0
这里出了什么问题?
答案 0 :(得分:1)
我首先会以不同的方式计时,不在方法中插入计时调用,而是返回结果然后调用方法调用:
from numba import autojit
def triple_count(num):
count=0.0
r=range(num)
for i in r:
for j in r:
for k in r:
count += i*j*k
return count
triple_count_numba = autojit(triple_count)
num=200
:
In [7]: triple_count(200)
Out[7]:
7880599000000.0
In [8]:triple_count_numba(200)
Out[8]:
7880599000000.0
In [9]: %timeit triple_count(200)
1 loops, best of 3: 747 ms per loop
In [10]: %timeit triple_count_numba(200)
100 loops, best of 3: 6.59 ms per loop
因此,numba产生与vanilla python相同的答案并且速度更快。使用num=500
,它是11.5秒vs 106毫秒。我正在使用numba 0.14.0。您可以在标准的python脚本中以编程方式使用timeit,但是为了方便起见,我在使用%magics的IPython笔记本中使用它。