2010-07-26 6 views
104

के लिए नकली मैट्रिक्स मैं numpy का उपयोग कर रहा हूँ। मेरे पास 1 कॉलम और एन पंक्तियों वाला मैट्रिक्स है और मैं एन तत्वों से एक सरणी प्राप्त करना चाहता हूं।सरणी

उदाहरण के लिए, यदि मेरे पास M = matrix([[1], [2], [3], [4]]) है, तो मैं A = array([1,2,3,4]) प्राप्त करना चाहता हूं।

इसे प्राप्त करने के लिए, मैं A = np.array(M.T)[0] का उपयोग करता हूं। क्या कोई भी परिणाम प्राप्त करने के लिए एक और अधिक शानदार तरीका जानता है?

धन्यवाद!

+0

Ivnerse प्रश्न: [एक 2D numpy मैट्रिक्स के लिए एक 2 डी numpy सरणी परिवर्तित] (http://stackoverflow.com/questions/17443620/convert-a-2d -numpy-array-to-a-2d-numpy-matrix) –

उत्तर

125

आप कुछ में थोड़ा और अधिक पठनीय चाहते हैं, तो आप ऐसा कर सकते हैं: इसके तुल्य

A = np.squeeze(np.asarray(M)) 

, आप भी कर सकता है: A = np.asarray(M).reshape(-1), लेकिन वह थोड़ा कम आसान को पढ़ने के लिए है।

+4

मेरे हिस्से पर थोड़ा सा हिस्सा ... अलग-अलग इकाइयों के रूप में numpy के पास सरणी और matrices क्यों है। यह इतना अवांछित IMHO है। इस टिप @ जो के लिए धन्यवाद। – Naijaba

+5

@Naijaba - इसके लायक होने के लिए, मैट्रिक्स वर्ग प्रभावी रूप से (लेकिन औपचारिक रूप से नहीं) कमजोर है। यह ज्यादातर ऐतिहासिक उद्देश्यों के लिए है। 'Numpy.matrix' को हटाकर एक विवादास्पद मुद्दा है, लेकिन numpy devs आपसे बहुत सहमत हैं कि दोनों कारणों से पूरी तरह से अवांछित और परेशान हैं। हालांकि, 'मैट्रिक्स' का उपयोग करने वाले पुराने, अनियंत्रित कोड "जंगली में" की मात्रा को पूरी तरह से निकालना मुश्किल हो जाता है। –

+1

उल्लेख नहीं है, वास्तविक मैट्रिक्स गुणा केवल Numpy 1.10 में सरणी के लिए जोड़ा गया था, और मूल रूप से अभी भी बीटा में है। इसका मतलब यह है कि बहुत से लोगों (स्वयं सहित) को अभी भी किए गए कार्यों को पूरा करने के लिए सरणी के बजाय मैट्रिस का उपयोग करना होगा। https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html –

5

या आप

A = M.view(np.ndarray) 
A.shape = -1 
10
A, = np.array(M.T) 

के साथ कुछ अस्थायी कर्मियों से बचने की कोशिश कर सकता है निर्भर करता है आप लालित्य से मैं लगता है क्या मतलब है, लेकिन thats मैं क्या कर सकता

4

आप निम्न संस्करण की कोशिश कर सकते हैं:

result=np.array(M).flatten() 
5
np.array(M).ravel() 

आप गति के लिए परवाह है; लेकिन आप स्मृति के लिए देखभाल करता है, तो:

np.asarray(M).ravel() 
1

पहले, Mv = numpy.asarray(M.T), जिसे आप एक 4x1 लेकिन 2 डी सरणी देता है।

फिर, A = Mv[0,:] प्रदर्शन करें, जो आपको वह चाहिए जो आपको चाहिए। आप उन्हें numpy.asarray(M.T)[0,:] के रूप में एक साथ रख सकते हैं।

0

इस सरणी में मैट्रिक्स में परिवर्तित कर देंगे

A = np.ravel(M).T