numpy

2012-09-25 14 views
48

में एक 1 डी सरणी में 2 डी सरणी में कनवर्ट करें मैं मैट्रिक्स में कॉलम की संख्या निर्दिष्ट करके एक 1-आयामी सरणी को मैट्रिक्स में परिवर्तित करना चाहता हूं। कुछ ऐसा है जो इस तरह काम करेगा:numpy

> import numpy as np 
> A = np.array([1,2,3,4,5,6]) 
> B = vec2matrix(A,ncol=2) 
> B 
array([[1, 2], 
    [3, 4], 
    [5, 6], 
    [7, 8]]) 

numpy एक समारोह है कि मेरी बनाया हुआ समारोह "vec2matrix" की तरह काम करता है? (मैं समझता हूं कि आप एक मैट्रिक्स की तरह एक 1 डी सरणी को इंडेक्स कर सकते हैं, लेकिन यह मेरे पास कोड में कोई विकल्प नहीं है - मुझे यह रूपांतरण करने की आवश्यकता है)

उत्तर

67

आप reshape सरणी चाहते हैं।

B = np.reshape(A, (-1, 2)) 
3

की तरह कुछ का प्रयास करें:

B = np.reshape(A,(-1,ncols)) 

आप यकीन है कि तुम हालांकि ncols करके अपने सरणी में तत्वों की संख्या विभाजित कर सकते हैं बनाने के लिए की आवश्यकता होगी। order कीवर्ड का उपयोग करके आप B में संख्याओं को खींचने के क्रम में भी खेल सकते हैं।

26

आपके पास दो विकल्प:

  • तुम अब मूल आकार चाहते हैं, सबसे आसान बस

    a.shape = (a.size//ncols, ncols) 
    

    आप द्वारा a.size//ncols स्विच कर सकते हैं सरणी के लिए एक नया आकार आवंटित करने के लिए है स्वचालित आकार की गणना करने के लिए -1 स्वचालित रूप से। सुनिश्चित करें कि a.shape[0]*a.shape[1]=a.size, अन्यथा आप कुछ समस्या में भाग लेंगे।

  • आप np.reshape समारोह के साथ एक नई सरणी, कि ज्यादातर

    new = np.reshape(a, (-1, ncols)) 
    

    जब यह संभव है ऊपर प्रस्तुत संस्करण की तरह काम करता है प्राप्त कर सकते हैं, new सिर्फ प्रारंभिक सरणी a के एक दृश्य के लिए किया जाएगा, कि अर्थ डेटा साझा किया जाता है। कुछ मामलों में, हालांकि, new सरणी इसके बजाय एकोपी होगी। ध्यान दें कि np.reshape एक वैकल्पिक कीवर्ड order भी स्वीकार करता है जो आपको पंक्ति-प्रमुख सी ऑर्डर से कॉलम-प्रमुख फोरट्रान ऑर्डर पर स्विच करने देता है। np.reshapea.reshape विधि का फ़ंक्शन संस्करण है।

आप आवश्यकता a.shape[0]*a.shape[1]=a.size का सम्मान नहीं कर सकते हैं, तो आप एक नई सरणी बनाने के लिए होने के साथ फंस रहे हैं। आप np.resize समारोह और np.reshape साथ यह मिश्रण, जैसे

>>> a =np.arange(9) 
>>> np.resize(a, 10).reshape(5,2) 
+2

पूरा जवाब का उपयोग कर सकते हैं! यह स्वीकार किया जाना चाहिए! – gota