numba似乎不起作用

时间:2014-10-02 03:55:10

标签: python numba

以下是我为测试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

这里出了什么问题?

1 个答案:

答案 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笔记本中使用它。