2011-01-17 15 views
7

के रूप में एक-आयामी numpy.array इंडेक्सिंग मैं रनटाइम के दौरान विभिन्न आयामों के साथ numpy.array को इंडेक्स करने का प्रयास कर रहा हूं। उदाहरण प्राप्त करने के लिएमैट्रिक्स

IndexError: too many indices

: एक * मीटर सरणी a की पहली पंक्ति, तो आप बस

a[0,:] 

हालांकि, मामले में एक एक 1xN वेक्टर होने वाला कर सकते हैं, इस कोड को ऊपर एक सूचकांक त्रुटि देता है चूंकि कोड को यथासंभव कुशलतापूर्वक निष्पादित करने की आवश्यकता है क्योंकि मैं if कथन प्रस्तुत नहीं करना चाहता हूं। क्या किसी के पास एक सुविधाजनक समाधान है जो आदर्श रूप से किसी भी डेटा संरचना प्रकार को बदलने में शामिल नहीं है?

+0

आपके पास केवल 1- और 2 डी सरणी हैं? – Paul

+0

केवल 1 डी एन-लम्बाई सरणी गिनती के बजाय "डेटा संरचना प्रकार को बदलने" के रूप में सरणी को 2 डी 1xn सरणी के रूप में दोबारा बदलना होगा? –

+0

ये सभी 2 डी सरणी (एमएक्सएन) सैद्धांतिक रूप से हैं, कुछ सिर्फ 1xn arrays होने के लिए खुश हैं, उदा। मीटर = 1। वास्तव में वे सशर्त संभावना तालिका का प्रतिनिधित्व करते हैं और मामला m = 1 एक चर के अनुरूप होता है जिसमें कोई निर्भरता नहीं होती है। – Alain

उत्तर

9

a[0,:] के बजाय बस a[0] का उपयोग करें। यह एक मैट्रिक्स के लिए पहली पंक्ति और वेक्टर के लिए पहली प्रविष्टि वापस करेगा। क्या यह वही है आप जिसकी तलाश में हैं?

यदि आप पूरे वेक्टर को एक-आयामी मामले में प्राप्त करना चाहते हैं, तो आप numpy.atleast_2d(a)[0] का उपयोग कर सकते हैं। यह आपके वेक्टर की प्रतिलिपि नहीं करेगा - यह इसे दो-आयामी 1 एक्स एन-सरणी के रूप में एक्सेस करेगा।

+1

मुझे कम से कम 2 डी के बारे में पता नहीं था; काम। +1 –

+0

मैं दूसरा कर सकता हूं, numpy.atleast_2d बहुत उपयोगी है और वास्तव में जो मैं खोज रहा था। बहुत बहुत धन्यवाद। – Alain

1

Numpy for Matlab Users विकी पेज के 'array' or 'matrix'? Which should I use? अनुभाग से:

>>> import numpy as np 
>>> a1 = np.array([1,2,3]) 
>>> a1 
array([1, 2, 3]) 
>>> a2 = np.array([[1,2,3]]) // Notice the two sets of brackets 
>>> a2 
array([[1, 2, 3]]) 
>>> a3 = np.array([[1],[2],[3]]) 
>>> a3 
array([[1], 
     [2], 
     [3]]) 

तो, आप सुनिश्चित करें कि आपके सरणियों के सभी कर रहे हैं कि इस प्रकार हैं:

For array, the vector shapes 1xN, Nx1, and N are all different things. Operations like A[:,1] return a rank-1 array of shape N, not a rank-2 of shape Nx1. Transpose on a rank-1 array does nothing.

यहाँ दिखा रहा है कि वे एक ही नहीं कर रहे हैं एक उदाहरण है 2 डी सरणी, या उनमें से कुछ 1 डी सरणी हैं?

यदि आप array[0,:] के अपने आदेश का उपयोग करना चाहते हैं, तो मैं वास्तव में 1 डी arrays के बजाय 1xN 2d arrays का उपयोग करने की अनुशंसा करता हूं। यहां एक उदाहरण दिया गया है:

>>> a2 = np.array([[1,2,3]]) // Notice the two sets of brackets 
>>> a2 
array([[1, 2, 3]]) 
>>> a2[0,:] 
array([1, 2, 3]) 
>>> b2 = np.array([[1,2,3],[4,5,6]]) 
>>> b2 
array([[1, 2, 3], 
     [4, 5, 6]]) 
>>> b2[0,:] 
array([1, 2, 3])