Numpy मैट्रिक्स से सरणी तक


149

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

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

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

धन्यवाद!


जवाबों:


192

यदि आप कुछ अधिक पठनीय चाहते हैं, तो आप ऐसा कर सकते हैं:

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

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


9
मेरे हिस्से पर थोड़ा शेख़ी ... सुन्न क्यों अलग संस्थाओं के रूप में arrays और matrices है। यह बहुत unpythonic IMHO है। इस टिप के लिए धन्यवाद @ जो।
नजीबा

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

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

1
स्पार्स मैट्रीज़ मेमोरी-कुशल मशीन लर्निंग (जैसे, sklearn) के लिए मौलिक हैं । वास्तव sparse matrixमें scipy, विभिन्न प्रकार हैं , जो पंक्तियों या स्तंभों के माध्यम से कुशल पहुंच की अनुमति देते हैं। मुझे लगता है कि यह मैट्रिक्स और सरणी की अवधारणाओं को विलय करने के लिए एक मुद्दा हो सकता है। उस ने कहा, मैं सोच रहा हूं कि क्या कोई sparse arrayप्रकार पेश किया जा सकता है और क्या ऐसा करने की कोई योजना है। कोई सुराग?
पीएमएस

मुझे लगता है कि .flatten () साथ ही .squeeze () काम करता है, जब तक आप अंत में 1D सरणी चाहते हैं।
शब्दफिरवाइज

122

6
मुझे लगता है कि यह जवाब स्वीकार किए गए उत्तर, प्रदर्शन-वार और सादगी से बेहतर है
dariush

M.A1 महान है, "ravel" और "flatten" के रूप में समान कार्यान्वयन और इस मामले में कोई भी डेटा कॉपी A का कारण नहीं बनता है, इस प्रकार M से जुड़ा हुआ रहता है, जो कि A और / या M के परस्पर परिवर्तन होने पर आश्चर्य का कारण बन सकता है। M.flat वास्तविक वैकल्पिक रिटर्निंग "फ्लैटिटर" जनरेटर (केवल पढ़ने के लिए शब्दार्थ) np.squeeze (M) # आकार 1 के आयामों को दूर करने वाला दृश्य देता है, यहाँ भी ठीक है, लेकिन सामान्य M np.reshape के लिए 1-d होने की गारंटी नहीं है ( M, -1) # आमतौर पर आकार संगतता के आधार पर एक दृश्य है, यह "-1" A1 / ravel / समतल करने के लिए एक गोल चक्कर रास्ता है
jayprich

13
A, = np.array(M.T)

निर्भर करता है कि आप लालित्य से मेरा क्या मतलब है लेकिन मुझे लगता है कि मैं क्या करूँगा



7
np.array(M).ravel()

यदि आप गति की परवाह करते हैं; लेकिन अगर आप याददाश्त की देखभाल करते हैं:

np.asarray(M).ravel()

यह आपके उत्तर की गुणवत्ता में सुधार करेगा यदि आपने बताया है कि क्यों
मिलो विलोन्डेक


2

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

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



0

ravel () और flatten () numpy के फ़ंक्शंस दो तकनीकें हैं जिन्हें मैं यहाँ आज़माऊँगा। मैं जो , सिराज , बबल और केवड द्वारा किए गए पदों को जोड़ना चाहूंगा

घपला:

A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)

समतल:

M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)

numpy.ravel()यह एक पुस्तकालय स्तर का कार्य है, जो कि किसी भी प्रकार के एरे की नकल नहीं करता है, क्योंकि यह तेजी से होता है। हालाँकि, यदि आप उपयोग कर रहे हैं तो सरणी A में कोई भी बदलाव मूल सरणी M पर ले जाएगाnumpy.ravel()

numpy.flatten()से धीमी हैnumpy.ravel() । लेकिन अगर आप numpy.flatten()A बनाने के लिए उपयोग कर रहे हैं , तो A में परिवर्तन मूल सरणी M पर नहीं किया जाएगा

numpy.squeeze()और M.reshape(-1)से धीमी हैं numpy.flatten()औरnumpy.ravel()

%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop

%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop

%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop

%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.