numpy.concatenate与奇怪的(3,)形状的数组?

时间:2014-11-28 16:10:30

标签: python arrays numpy

当numpy.shape返回部分空的形状时,为什么我不能将它与另一个数组连接起来是什么意思?例如:

In: print h_labels.shape
    print Thood0_48.shape
    print np.concatenate((Thood0_48,h_labels),axis=1).shape

Out: (400,)
     (400, 48)

     ---------------------------------------------------------------------------
     ValueError                                Traceback (most recent call last)
     <ipython-input-403-97b371dd2547> in <module>()
     1 print h_labels.shape
     2 print Thood0_48.shape
     ----> 3 print np.concatenate((Thood0_48,h_labels),axis=1).shape

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

除了连接问题的答案之外,具有形状(400,1)的数组和具有形状(400,)的数组之间的根本区别是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

(400,)数组是一维数组(行向量)。逗号就在那里表示一个元组 - 例如类型(400)(400,)到解释器中。 (400,1)数组是形状为400行和1列(列向量)的2D数组。自动更改数组形状的函数(如vstackhstack)仍会调用concatenate,但会增加额外的python开销(例如vstack source)。

以下任何一种都可以使用:

np.concatenate((Thood0_48[:, None], h_labels), axis=1)
np.vstack((Thood0_48, h_labels.T)).T

我会说前者是一个更好的解决方案,但后者演示了vstack函数。