2017-02-01 7 views
5

इन एनपी सरणी को कैसे समेटें?numpy array concatenate: "ValueError: सभी इनपुट सरणी में आयामों की समान संख्या होनी चाहिए"

एक आकार एक आकार के साथ (5,4)

[[ 6487 400 489580  0] 
[ 6488 401 492994  0] 
[ 6491 408 489247  0] 
[ 6491 408 489247  0] 
[ 6492 402 499013  0]] 

दूसरा np.array के साथ पहली np.array (1,)

[ 16. 15. 12. 12. 17. ] 

अंतिम परिणाम होना चाहिए

[[ 6487 400 489580 0 16] 
[ 6488 401 492994 0 15] 
[ 6491 408 489247 0 12] 
[ 6491 408 489247 0 12] 
[ 6492 402 499013 0 17]] 

मैंने np.concatenate([array1, array2]) को आजमाया लेकिन मुझे यह त्रुटि मिली

ValueError: all the input arrays must have same number of dimensions

मैं क्या गलत कर रहा हूं?

np.column_stack((a,b)) 

नमूना -

np.concatenate((a,b[:,None]),axis=1) 

वैकल्पिक रूप से, हम np.column_stack है कि यह का ख्याल रखता है उपयोग कर सकते हैं -

+0

कैसे हो कि दूसरी सरणी आकार माना जाता है '(1,)'? क्या ऑब्जेक्ट एरे के साथ यहां कुछ अजीब बात है? – user2357112

+0

जब मैं array2.shape – RaduS

+0

चलाता हूं तो मुझे यही मिला है, फिर आपकी सरणी गंभीर रूप से किसी तरह से गड़बड़ हो गई है, और आपको यह पता लगाने की आवश्यकता है कि क्या हो रहा है। – user2357112

उत्तर

5

np.concatenate उपयोग करने के लिए, हम 2D को दूसरी सरणी का विस्तार करने के लिए और फिर साथ axis=1 श्रेणीबद्ध जरूरत रन -

In [84]: a 
Out[84]: 
array([[54, 30, 55, 12], 
     [64, 94, 50, 72], 
     [67, 31, 56, 43], 
     [26, 58, 35, 14], 
     [97, 76, 84, 52]]) 

In [85]: b 
Out[85]: array([56, 70, 43, 19, 16]) 

In [86]: np.concatenate((a,b[:,None]),axis=1) 
Out[86]: 
array([[54, 30, 55, 12, 56], 
     [64, 94, 50, 72, 70], 
     [67, 31, 56, 43, 43], 
     [26, 58, 35, 14, 19], 
     [97, 76, 84, 52, 16]]) 

तो b ऐसी है कि इसकी एक 1D(1,) के आकार के साथ dtype=object की सरणी, सबसे शायद सभी डेटा की उस में केवल तत्व में निहित है, हम की जरूरत श्रृंखलाबद्ध से पहले इसे बाहर समतल। उस उद्देश्य के लिए, हम भी np.concatenate का उपयोग कर सकते हैं। बिंदु को स्पष्ट करने के लिए यहां एक नमूना चलाया गया है -

In [118]: a 
Out[118]: 
array([[54, 30, 55, 12], 
     [64, 94, 50, 72], 
     [67, 31, 56, 43], 
     [26, 58, 35, 14], 
     [97, 76, 84, 52]]) 

In [119]: b 
Out[119]: array([array([30, 41, 76, 13, 69])], dtype=object) 

In [120]: b.shape 
Out[120]: (1,) 

In [121]: np.concatenate((a,np.concatenate(b)[:,None]),axis=1) 
Out[121]: 
array([[54, 30, 55, 12, 30], 
     [64, 94, 50, 72, 41], 
     [67, 31, 56, 43, 76], 
     [26, 58, 35, 14, 13], 
     [97, 76, 84, 52, 69]]) 
+0

बी [:, कोई नहीं] नोटेशन बहुत अच्छा है, लेकिन यह बी का उल्लेख करने योग्य भी हो सकता है। reshape() – Andrew

+2

'np.c_ [a, b]' –

+0

@PaulPanzer भी काम करता है यह एक नई पोस्ट के लायक है! इसे पोस्ट करने पर विचार करें। – Divakar

2

आप ऐसा कुछ कर सकते हैं।

import numpy as np 

x = np.random.randint(100, size=(5, 4)) 
y = [16, 15, 12, 12, 17] 

print(x) 

val = np.concatenate((x,np.reshape(y,(x.shape[0],1))),axis=1) 
print(val) 

यह आउटपुट:

[[32 37 35 53] 
[64 23 95 76] 
[17 76 11 30] 
[35 42 6 80] 
[61 88 7 56]] 

[[32 37 35 53 16] 
[64 23 95 76 15] 
[17 76 11 30 12] 
[35 42 6 80 12] 
[61 88 7 56 17]] 
2

वहाँ भी है np.c_

>>> a = np.arange(20).reshape(5, 4) 
>>> b = np.arange(-1, -6, -1) 
>>> a 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15], 
     [16, 17, 18, 19]])                                 
>>> b                                      
array([-1, -2, -3, -4, -5])                                 
>>> np.c_[a, b] 
array([[ 0, 1, 2, 3, -1],   
     [ 4, 5, 6, 7, -2],      
     [ 8, 9, 10, 11, -3],      
     [12, 13, 14, 15, -4],         
     [16, 17, 18, 19, -5]]) 
+0

आपको यह डीकोड करने की हिम्मत:' np.r _ ['1,2,0', a, -1: -6 : -1] ':) – hpaulj

+0

मुझे आश्चर्य है कि' np.c_' हमेशा 'np.column_stack' के लिए प्रतिस्थापित कर सकता है? – hpaulj

+0

@ hpaulj मुझे यह पसंद है, लेकिन मैं 'np.column_stack' से परिचित नहीं हूं। यह मूल रूप से एक 2 डी 'concatenate' है कि विशेष मामलों 1 डी इनपुट, सही? –