मैं numba
का उपयोग करके 0xके साथ एक 'वेक्सपी' (एक वेक्टर में स्केलर एकाधिक को एक वेक्टर में जोड़ना और परिणाम को पहले असाइन करना) करना चाहता हूं। निम्नलिखित परीक्षण करते हुए, मैंने देखा कि लूप लिखना a += c * b
करने से बहुत तेज था।नुम्बा: मैन्युअल लूपिंग एक + = सी * बी से numpy arrays के साथ तेजी से लूपिंग?
मुझे इसकी उम्मीद नहीं थी। इस व्यवहार का कारण क्या है? ध्यान में रखने की
import numpy as np
from numba import jit
x = np.random.random(int(1e6))
o = np.random.random(int(1e6))
c = 3.4
@jit(nopython=True)
def test1(a, b, c):
a += c * b
return a
@jit(nopython=True)
def test2(a, b, c):
for i in range(len(a)):
a[i] += c * b[i]
return a
%timeit -n100 -r10 test1(x, o, c)
>>> 100 loops, best of 10: 2.48 ms per loop
%timeit -n100 -r10 test2(x, o, c)
>>> 100 loops, best of 10: 1.2 ms per loop
आपके उत्तर के लिए धन्यवाद। मैंने वास्तव में सोचा था कि '+ =' ऑपरेटर के उपयोग से, 'numba' इसे समझने में सक्षम होगा और इसे कुशलतापूर्वक करेगा क्योंकि यह बहुत स्पष्ट है। मुझे लगता है कि यह यहां एक विशेष मामला है, उदाहरण के लिए गति के संदर्भ में डॉट उत्पाद 'np.dot' को पीटा नहीं जा सकता है। – NoBackingDown
यह कुछ हद तक स्पर्शपूर्ण है, लेकिन वास्तव में 'np.dot' एक विशेष मामला है। 'numpy' आपके द्वारा इंस्टॉल किए गए बीएलएएस को कॉल करेगा, जो इंटेल के एमकेएल की तरह बहुत कुछ हो सकता है। – chrisb