2014-10-02 74 views
1

下面是一些代碼,我寫測試numbanumba不會出現工作

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使用@autojit

時被註釋掉

2.3796 seconds 
rate : 126.073 per second 
count: 9.0216784125e+13 

結果

0.0000 seconds 

rate : 8065969.231 per second 

count: 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產生與香草蟒相同的答案,並且速度更快。與num=500它是11.5秒比106毫秒。我正在使用numba 0.14.0。您可以在標準的Python腳本中以編程方式使用timeit,但爲了方便起見,我在使用%magics的IPython筆記本中使用它。

+0

謝謝。這對我有用。但我仍然不明白爲什麼我的版本在numba中不能正確運行。它輸出零!它讓我感到擔心,它只是運行沒有錯誤信息,但給出了錯誤的答案。看起來非常危險。 – Dave31415 2014-10-02 13:47:03

+0

我實際上並沒有在你的原始代碼上得到零。它返回正確的答案。你使用的是哪個版本的Numba? – JoshAdel 2014-10-02 14:07:47