2017-12-01 6 views
1

NumbaがNumPyとどのように機能するかを理解するためにいくつかのテストを行っています。ここでNumbaがパラメータを処理できるかどうかを確認しようとしています。Numba 0.35.0:NumPy outパラメータを使用

import numpy as np 
from numba import njit , jit 
from time import time 

@njit 
def mult(a,b, N = 1000000): 
    c = np.zeros_like(a) 
    for i in range(N): 
     np.multiply(a, b, out=c) 
    return c 

d = np.asarray([1,2,3,4,5,6,7,8,9]) 
e = np.asarray([1,2,3,4,5,6,7,8,9]) 

t = time() 
e = mult(d,e) 

print "Time Elapsed :" + str(time() - t) 

Numbaを使用しないと、コードはうまくいきます。 @jit装飾を使用するよりも素早く〜:私の設定で〜1.6sに対して〜1.2s。

@njitを使用してそのエラーにつながる:

LoweringError: unsupported keyword arguments when calling Function(<ufunc 'multiply'>) 

ものの、Reading the Numba 0.15.1 doc.を、彼らはパラメータがサポートされていて言います。これに対して私は何ができますか?

答えて

1

nopythonモードのnumbaはkeyword-argumentをサポートしていません。それはあなたが位置引数として渡す場合は動作します:

@njit 
def mult(a,b, N = 1000000): 
    c = np.zeros_like(a) 
    for i in range(N): 
     np.multiply(a, b, c) 
    return c 

しかし、時にはnumbaコンパイラの通知は、結果がループとの間で変化しないので、 numbaに問題があることができ、常に同じことを行うループを使用ループが完全に最適化され、本質的に欠陥のあるタイミングになります。しかし、この場合、私はこれが起こったとは思わないが、numbaのような積極的なコンパイラを使用し、Pythonの「素朴な」アプローチに対してタイミングをとるときは注意する必要がある。

関連する問題