2015-05-18 137 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的阵列 –