2013-10-28 15 views
9

Khi tôi so sánh hai mảng NumPy bên trong chức năng của tôi, tôi nhận được một lỗi chỉ nói chiều dài-1 mảng có thể được chuyển đổi sang vô hướng Python:Numba autojit lỗi trên so sánh mảng NumPy

from numpy.random import rand 
from numba import autojit 

@autojit 
def myFun(): 
    a = rand(10,1) 
    b = rand(10,1) 
    idx = a > b 
    return idx 

myFun() 

Lỗi:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-7-f7b68c0872a3> in <module>() 
----> 1 myFun() 

/Users/Guest/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numba/numbawrapper.so in numba.numbawrapper._NumbaSpecializingWrapper.__call__ (numba/numbawrapper.c:3764)() 

TypeError: only length-1 arrays can be converted to Python scalars 

Trả lời

3

Điều này có thể phụ thuộc vào vấn đề của bạn, nhưng cách bạn đã tự động hiển thị, bạn sẽ không nhận được tăng tốc. Với numba bạn cần phải chứng minh một cách rõ ràng for vòng như vậy:

from numpy.random import rand 
from numba import autojit 
@autojit 
def myFun(): 
    a = rand(10,1) 
    b = rand(10,1) 
    idx = np.zeros((10,1),dtype=bool) 
    for x in range(10): 
     idx[x,0] = a[x,0] > b[x,0] 
    return idx 

myFun() 

này hoạt động tốt.

+3

Vâng, một trong những động lực chính của việc sử dụng mảng NumPy là tận dụng các chức năng được tích hợp sẵn của chúng và không phải viết lại tất cả các tiện ích của chúng một cách rõ ràng. Tôi chỉ đưa ra một ví dụ đơn giản mà Numba phá vỡ với các phép toán logic trên các mảng NumPy. Nhưng, nói chung, tôi nhận được lỗi với nhiều loại Boolean/logic lập chỉ mục, và đây là một phương pháp thực sự hữu ích nếu bạn đang làm số/khoa học mã hóa với mảng. – KartMan