2017-12-01 16 views
1

Numba가 NumPy와 어떻게 작동하는지 더 잘 이해하기 위해 몇 가지 테스트를하고 있습니다. 여기 Numba가 매개 변수를 처리 할 수 ​​있는지 확인하려고합니다.Numba 0.35.0 : NumPy 출력 매개 변수 사용

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.2 초 ~ ~ 1.6s 내 구성.

@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 접근 방식을 사용할 때 조심해야합니다.