1

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

这里出了什么问题?

4

1 回答 1

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=50011.5 秒对 106 毫秒。我正在使用 numba 0.14.0。您可以在标准 python 脚本中以编程方式使用 timeit,但为了方便起见,我在 IPython 笔记本中使用 %magics 使用它。

于 2014-10-02T04:22:16.843 回答