numpy को वेक्टरकृत ऑपरेशंस करने के लिए डिज़ाइन किया गया है: यदि आपको numpy.append
पर कॉल करना है, तो प्रत्येक कॉल का ओवरहेड इसे लायक नहीं बनायेगा।
numpy
में इस ऑपरेशन (रोलिंग का मतलब) करने का सही तरीका यह है कि इसे सदिश बनाना है, उदाहरण के लिए संकल्प समारोह का उपयोग करना (सुझाव के लिए @askewchan के लिए धन्यवाद)। उस मामले में यह दूर सूची समझ की तुलना में तेजी है:
import timeit
import numpy as np
y = np.random.normal(0, 1, 10000)
print timeit.timeit("np.convolve(y, np.ones(5)/5, mode='valid')",
setup = "from __main__ import y; import numpy as np",
number=100)
print timeit.timeit("[sum(y[i:i+5])/5. for i in range(len(y)-4)]",
setup = "from __main__ import y",
number=100)
मेरी मशीन पर, numpy vectorized समाधान के 100 पुनरावृत्तियों 0.03 सेकंड का समय लगता है, जबकि सूची समझ 6.56 सेकंड लेता है।
स्रोत
2013-10-07 19:37:52
आप अभी भी पहले उदाहरण में xrange का उपयोग कर सकते हैं, इसे थोड़ा और तेज कर सकते हैं। – gregb212
सूची की समझ लूप्स से तेज होती है। Http://stackoverflow.com/questions/2849645/in-python-is-it-better-to-use-list-comprehensions-or-for-each-loops – tom
जब आप कहते हैं कि ये समकक्ष हैं तो आपका क्या मतलब है?न्यूमपी के 'एपेंड' को देखते हुए, यह न्यूमपी के 'कॉन्सटेनेट' को बुलाता है जो कम से कम मास्क किए गए सरणी के लिए अतिरिक्त जांच करता है। इसके अतिरिक्त, सरणी में जोड़ना अक्सर अधिक महंगा होता है, इसलिए मुझे यकीन नहीं है कि यह परिणाम काउंटर-अंतर्ज्ञानी है। – ely