2013-10-28 28 views
9

की तुलना पर त्रुटि autojit जब मैं अपने समारोह के अंदर दो NumPy सरणी तुलना मैं एक त्रुटि केवल लंबाई -1 सरणियों कह अजगर scalars में बदला जा सकता है:Numba 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() 

त्रुटि:

--------------------------------------------------------------------------- 
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 

उत्तर

3

यह आपके मुद्दे के लिए द्वितीयक हो सकता है, लेकिन जिस तरह से आपने ऑटोोजिट दिखाया है, आपको गति में वृद्धि नहीं होगी। Numba के साथ आप स्पष्ट रूप से ऐसा तरह for छोरों दिखाने की जरूरत है:

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() 

यह सिर्फ ठीक काम करता है।

+3

ठीक है, न्यूप्पी सरणी का उपयोग करने की मुख्य प्रेरणा में से एक है अपने अंतर्निहित कार्यों का लाभ उठाना और उनकी सभी उपयोगिताओं को स्पष्ट रूप से फिर से लिखना नहीं है। मैंने अभी एक साधारण उदाहरण दिया है जहां Numba NumPy arrays पर लॉजिकल ऑपरेशंस के साथ टूट जाता है। लेकिन, आम तौर पर, मुझे कई प्रकार के बूलियन/लॉजिकल इंडेक्सिंग के साथ त्रुटियां मिलती हैं, और यदि आप सरणी के साथ संख्यात्मक/वैज्ञानिक कोडिंग कर रहे हैं तो यह वास्तव में उपयोगी तरीका है। – KartMan