2014-05-13 27 views
7

का उपयोग करके numpy सरणी असाइनमेंट यदि बी 2x2 np.ndarray है और निम्न असाइनमेंट किया जाता है, तो पृष्ठभूमि में numpy क्या करता है, यानी यह सूची [100, 100] पहले को एक numpy सरणी में परिवर्तित करता है या यह सीधे ख की पहली पंक्ति में मूल्यों में भरने के लिए सूची [100,100] का उपयोग करता है:स्लाइसिंग

b[1,:] = [100,100] 

दस्तावेज में कहाँ मैं इस बारे में अधिक जानकारी मिल सकती है?

+0

देखने 'numpy' खुला स्रोत है, यदि आप कैसे कुछ * कार्यान्वित किया जाता है * सिर्फ स्रोतों को देखने में रुचि रखते हैं। – Bakuriu

+2

उत्तर "यह निर्भर करता है"। Numpy वितरण में 'core/src/multiarray/sequence.c' में देखें (' array_assign_slice': https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/sequence.c#L91)। आपके उदाहरण में, मुझे लगता है कि कोड सूची को सरणी में परिवर्तित नहीं करेगा, लेकिन अन्य मामलों के आधार पर, यह हो सकता है। –

+0

@goncalopp हाँ मैं स्मृति उपयोग के बारे में चिंतित हूं। – methane

उत्तर

-2

b[1,:] = [100,100] बिल्कुल

b[1,0] = 100 
b[1,1] = 100 

के रूप में यह संकलित छोरों का उपयोग करता है हालांकि यह तेजी से निष्पादित करने के लिए किया जाता है के समान है। (दूसरे को मूल्यों को श्रेय देने से पहले ndarray dtype में रूपांतरण करने की आवश्यकता है)।

+0

क्या यह कहीं दस्तावेज़ीकरण में है? यदि हां, तो क्या आप इसे एक दस्तावेज़ प्रदान कर सकते हैं जहां यह दस्तावेज है? धन्यवाद – dg123

+0

हां, कृपया मुझे बताएं कि यह दस्तावेज़ में कहीं है या नहीं। एक संकलित पाश क्या है? – methane

+0

हैलो, मैं व्याख्या की गई भाषा और संकलित भाषा के बीच के अंतर के बारे में बात कर रहा हूं। यह ज्ञात है कि पाइथन को संकुचित किए गए सी या जावा के विपरीत कमांड द्वारा कमांड निष्पादित किया जा सकता है। यह भी ज्ञात है कि numpy एक प्रकार का इंटरफ़ेस है जो पाइथन के साथ काम करता है लेकिन एक संकलित प्रोग्राम के रूप में चलता है। लूप प्रदर्शन के बारे में एक उदाहरण निम्नलिखित उत्तर में दिया गया है। – Taha

2

निष्पादन की गति का मूल्यांकन करने के लिए, हम 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 ...

संबंधित मुद्दे