2015-05-18 179 views
9

我想連接4個數組,形狀(78427,)的一個1D數組和形狀(78427,375/81/103)的三維數組。基本上這是4個具有78427圖像特徵的陣列,其中1D陣列對每個圖像只有1個值。Numpy連接二維數組與一維數組

我試圖串聯陣列如下:

>>> print X_Cscores.shape 
(78427, 375) 
>>> print X_Mscores.shape 
(78427, 81) 
>>> print X_Tscores.shape 
(78427, 103) 
>>> print X_Yscores.shape 
(78427,) 
>>> np.concatenate((X_Cscores, X_Mscores, X_Tscores, X_Yscores), axis=1) 

這將導致以下錯誤:

Traceback (most recent call last): File "", line 1, in ValueError: all the input arrays must have same number of dimensions

這個問題似乎是一維數組,但我真的不能明白爲什麼(它也有78427個值)。我試圖在連接它之前對1D數組進行轉置,但那也不起作用。

任何幫助什麼是正確的方法來連接這些數組將不勝感激!

回答

10

嘗試連接X_Yscores[:, None](或A[:, np.newaxis]作爲imaluengo建議)。這創建了一維數組中的二維數組。

例子:

A = np.array([1, 2, 3]) 
print A.shape 
print A[:, None].shape 

輸出:

(3,) 
(3,1) 
+3

只需指出'A [:,np.newaxis]'具有與'A [:,無]'相同的行爲,有時可以更直觀(實際上'np.newaxis == None')。 –

+0

但是,只有兩者具有相同的尺寸時纔是如此。在大多數情況下,我最終得到具有形狀(8400,)的陣列A和具有形狀(8399,21)的陣列B. 如何截斷/刪除A的最後幾行,使A和B具有相同的形狀,如(8399,)和(8399,21)。請指教。 –

2

我不知道,如果你想要的東西,如:

a = np.array([ [1,2],[3,4] ]) 
b = np.array([ 5,6 ]) 

c = a.ravel() 
con = np.concatenate((c,b)) 

array([1, 2, 3, 4, 5, 6]) 

OR

np.column_stack((a,b)) 

array([[1, 2, 5], 
     [3, 4, 6]]) 

np.row_stack((a,b)) 

array([[1, 2], 
     [3, 4], 
     [5, 6]]) 
+0

對此的任何想法:https://stackoverflow.com/questions/48676461/concatenate-combine-mx1-numpy-array-with-mxn-numpy-array –

2

你可以嘗試這一個班輪:

concat = numpy.hstack([a.reshape(dim,-1) for a in [Cscores, Mscores, Tscores, Yscores]]) 

的「祕密」這裏是利用已知的,常見的尺寸在一個軸,-1爲其他重塑,並自動尺寸相匹配(創建一個新的軸,如果需要的話)。

+0

可以幫助這裏:https://stackoverflow.com/questions/ 48676461 /串連-結合-MX1-numpy的陣列與 - MXN-numpy的陣列 –