Numpy如何将二维数组与一维数组拼接?

39
我正在尝试连接四个数组,其中一个形状为(78427,)的一维数组和三个形状为(78427, 375/81/103)的二维数组。基本上,这是78427张图像的4个特征数组,其中一维数组每张图像只有一个值。
我尝试按以下方式连接数组:
>>> 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: 所有输入数组的维度必须相同

问题似乎出在1D数组上,但我实际上看不出原因(它也有78427个值)。我尝试在连接它之前转置该1D数组,但那也没有起作用。

如果您能提供关于正确连接这些数组的方法的任何帮助,将不胜感激!

3个回答

34
尝试拼接X_Yscores[:, None](或如imaluengo建议的X_Yscores[:, np.newaxis])。这将从1D数组创建一个2D数组。
示例:
A = np.array([1, 2, 3])
print A.shape
print A[:, None].shape

输出:

(3,)
(3,1)

6
提醒一下,A[:, np.newaxis]A[:, None] 的行为是相同的,有时前者更易于理解(实际上 np.newaxis == None)。 - Imanol Luengo
然而,这只有在两个数组具有相同的维度时才成立。在大多数情况下,我得到的是数组A的形状为(8400,),而数组B的形状为(8399,21)。我该如何截断/删除A的最后几行,以便A和B都具有相同的形状,如(8399,)和(8399,21)?请给予建议。 - kRazzy R
np.newaxis 很直观,但我仍然不明白为什么 A[:, None] 能够工作。有人能帮我理解一下吗? - deadcode
它之所以有效,是因为"newaxisNone的别名",并且在索引中使用None告诉NumPy添加一个维度。因此,1D数组被转换为具有轴0和1的2D数组。 - Falko

17

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

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

或者

np.column_stack( (a,b) )

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

np.row_stack( (a,b) )

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

你对这个有什么想法:https://dev59.com/Lqjka4cB1Zd3GeqPFeHG - kRazzy R
1
有趣。np.vstack((a,b))的工作方式就像row_stack,但是np.stack((a,b))会出现“ValueError: all input arrays must have the same shape”的错误,而np.hstack((a,b))则会出现“ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)” 的错误。 - Dave X

6
您可以尝试这个一行代码:
concat = numpy.hstack([a.reshape(dim,-1) for a in [Cscores, Mscores, Tscores, Yscores]])

这里的“秘诀”是使用已知的公共维度在一个轴上进行重新塑形,而在另一个轴上使用-1,它会自动匹配大小(如果需要,创建一个新轴)。

可以在这里找到帮助:https://dev59.com/Lqjka4cB1Zd3GeqPFeHG - kRazzy R
一个普遍的做法是:np.concatenate([a.reshape(*shape,-1) for a in my_arrays],axis=-1),其中“shape”指的是除最后一个维度外已知维度的形状。 - Ben Farmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接