Numpy将2D数组与1D数组

时间:2015-05-18 13:52:37

标签: python arrays numpy concatenation

我正在尝试连接4个阵列,一个1D阵列形状(78427)和3个2D阵列形状(78427,375 / 81/103)。基本上这是4个阵列,具有78427个图像的特征,其中1D阵列每个图像只有1个值。

我尝试按如下方式连接数组:

>>> 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)

这会导致以下错误:

  

追踪(最近一次通话):     文件"",第1行,in   ValueError:所有输入数组必须具有相同的维数

问题似乎是一维数组,但我不能真正理解为什么(它还有78427个值)。我尝试在连接之前转置1D阵列,但这也没有用。

任何有关连接这些数组的正确方法的帮助都将不胜感激!

3 个答案:

答案 0 :(得分:14)

尝试连接X_Yscores[:, None](或A[:, np.newaxis],如imaluengo建议的那样)。这将从一维数组中创建一个2D数组。

示例:

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

输出:

(3,)
(3,1)

答案 1 :(得分:5)

你可以试试这个单行:

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

"秘密"这里是使用一个轴上的已知共同维度重新整形,另一个轴使用-1,它会自动匹配大小(如果需要,可以创建一个新轴)。

答案 2 :(得分:3)

我不确定你是否想要这样的东西:

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]])