2009-12-15 12 views
6

हैलो मेरे पास प्रत्येक में 1500 अंकों के साथ 1000 डेटा श्रृंखला है।मैं NUMPY सरणी में पंक्तियां और कॉलम कैसे जोड़ूं?

वे np.zeros ((1500, 1000) का उपयोग करके बनाए गए एक (1000x1500) आकार की नकली सरणी बनाते हैं और फिर डेटा से भरते हैं।

अब क्या होगा यदि मैं चाहता हूं कि सरणी 1600 x 1100 कहने के लिए बढ़े? क्या मुझे hstack और vstack का उपयोग करके सरणी जोड़नी है या क्या कोई बेहतर तरीका है?

मैं चाहता हूं कि सरणी के 1000x1500 टुकड़े में पहले से ही डेटा बदलना न पड़े, केवल रिक्त डेटा (शून्य) नीचे और दाएं, मूल रूप से जोड़ा गया है।

धन्यवाद।

उत्तर

3

यदि आप जोड़े गए तत्वों में शून्य चाहते हैं, my_array.resize((1600, 1000)) काम करना चाहिए। ध्यान दें कि यह numpy.resize(my_array, (1600, 1000)) से अलग है, जिसमें पिछली पंक्तियां डुप्लिकेट की गई हैं, जो शायद आप नहीं चाहते हैं।

अन्यथा, आप वास्तव में hstack और vstack उपयोग कर सकते हैं नए तत्वों से युक्त एक सरणी जोड़ने के लिए (उदाहरण के लिए आप शून्य करने के लिए तत्व है, जो अनावश्यक हो सकता है आरंभ से बचने के लिए चाहते हैं); numpy.concatenate() (देखें pydoc numpy.concatenate) भी काम करना चाहिए (जहां तक ​​मैं समझता हूं, यह अधिक सामान्य है)।

किसी भी मामले में, मुझे लगता है कि सरणी को विस्तारित करने के लिए एक नया मेमोरी ब्लॉक आवंटित किया जाना चाहिए, और ये सभी विधियां एक ही समय में लेती हैं।

+0

बस एक ध्यान दें कि इस मामले में जगह में डेटा रखने के लिए प्रकट नहीं होता है जब आप केवल डेटा सेट का विस्तार करना चाहते: >>> एक = numpy.array ([[1,2], [ 3,4]]) >>> सरणी ([[1, 2], [3, 4]]) >>> a.resize ((2,4)) ट्रेसबैक (हालिया कॉल अंतिम): फ़ाइल "", लाइन 1, वैल्यूएरर: किसी सरणी संदर्भ का आकार बदल नहीं सकता है या को इस तरह से किसी अन्य सरणी द्वारा संदर्भित किया गया है। आकार बदलें फ़ंक्शन >>> ए = numpy.array (ए) >>> a.resize ((2,4)) >>> सरणी ([[1, 2, 3, 4], [0, 0, 0, 0]]) – mathtick

0

आप अपने सटीक आवश्यकता के आधार पर reshape() और/या resize() उपयोग करना चाहिए।

यदि आप लेखकों से अध्याय और कविता चाहते हैं तो आप शायद नमस्ते चर्चा बोर्ड पर पोस्टिंग से बेहतर हैं।

7

यह आप क्या चाहते हैं (यानी, 3x3 और 4x4 सरणी सरणी का उपयोग कर ओपी में दो सरणियों प्रतिनिधित्व करने के लिए) ख के लिए पर एक

>>> import numpy as NP 
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3) 
>>> a 
>>> array([[1, 2, 2], 
      [7, 0, 7], 
      [0, 3, 0]]) 

>>> b = NP.zeros((4, 4)) 

मानचित्रण करना चाहिए:

>>> b[:3,:3] = a 

>>> b 
    array([[ 1., 2., 2., 0.], 
      [ 7., 0., 7., 0.], 
      [ 0., 3., 0., 0.], 
      [ 0., 0., 0., 0.]]) 
+0

मुझे उस कोड से एक त्रुटि मिली। अंतिम पंक्ति बी नहीं होना चाहिए [: 3,: 3] = ए?वैसे ही, साथ ही जब मैंने ऐसा किया तब से यह काम करता था और यही वह था जिसे मैं ढूंढ रहा था। –

+0

@ kηives yes, एक टाइपो, धन्यवाद - अब मेरी पोस्ट संपादित करें। – doug

2

कोई फर्क नहीं पड़ता कि आप स्मृति के एक हिस्से को फिर से आवंटित कर देंगे, इसलिए यदि आप arr.resize(), np.concatenate का उपयोग करते हैं तो इससे कोई फर्क नहीं पड़ता , hstack/vstack, आदि ध्यान दें कि यदि आप अनुक्रमिक रूप से बहुत सारे डेटा जमा कर रहे हैं, तो पाइथन सूचियां आमतौर पर अधिक कुशल होती हैं।

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