निष्पादन की गति का मूल्यांकन करने के लिए, हम timeit लाइब्रेरी का उपयोग करेंगे।
import timeit
import numpy as np
setup = """
import numpy as np
tmp = np.empty(shape=(1, 100))
values = [i for i in xrange(100)]
"""
stmt1 = """tmp[0, :] = values"""
stmt2 = """
for i, val in enumerate(values):
tmp[0, i] = val
"""
time1 = timeit.Timer(setup=setup, stmt=stmt1)
time2 = timeit.Timer(setup=setup, stmt=stmt2)
print "numpy way :", time1.timeit(number=100000)
print "Python way:", time2.timeit(number=100000)
आप इस परीक्षण कर सकते हैं और आपको लगता है कि numpy छोरों दो बार तेजी से कर रहे हैं देखेंगे:
- numpy way : 0.97758197784423828
- Python way: 2.1633858680725098
इसका कारण यह है एक चरण जहां values
में पूर्णांक (जो असीमित पूर्णांक हैं) में बदला जाता है है है 64 बिट्स की तैरती है। आदेश केवल छोरों की गति की तुलना में, प्रकार रूपांतरण सेटअप में प्रारंभिक किया जा सकता है:
numpy way : 0.131125926971
Python way: 2.64055013657
हम देखते हैं कि numpy छोरों 20 बार कर रहे हैं:
values = np.array([i for i in xrange(100)], dtype=np.float64)
यहाँ मैं क्या प्राप्त है पाइथन loops से तेज़।
आप और अधिक जानकारी मिल जाएगी कि वह आपके लिए vectorized computations in Python ...
देखने 'numpy' खुला स्रोत है, यदि आप कैसे कुछ * कार्यान्वित किया जाता है * सिर्फ स्रोतों को देखने में रुचि रखते हैं। – Bakuriu
उत्तर "यह निर्भर करता है"। Numpy वितरण में 'core/src/multiarray/sequence.c' में देखें (' array_assign_slice': https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/sequence.c#L91)। आपके उदाहरण में, मुझे लगता है कि कोड सूची को सरणी में परिवर्तित नहीं करेगा, लेकिन अन्य मामलों के आधार पर, यह हो सकता है। –
@goncalopp हाँ मैं स्मृति उपयोग के बारे में चिंतित हूं। – methane