堆叠2列向量

时间:2016-12-29 12:52:01

标签: python numpy

我有2个numpy数组

a.shape = (100,)
b.shape = (50,)
np.vstack((a,b))

ValueError: all the input array dimensions except for the concatenation axis must match exactly

vstack应该在行中堆叠数组。我有2个列向量应该工作。

但是当我尝试

np.hstack((a,b))

它给了我(150,)这就是我想要的。为什么会这样? Isnt vstack应该在行中堆叠吗?

2 个答案:

答案 0 :(得分:3)

当您拥有一维数组时,行和列并不完全有意义,只有多维数组才有意义。 np.vstack的文档中也明确提到了这一点:

  

相当于np.concatenate(tup,axis = 0)如果tup包含至少为2维的数组

对于1D数组,您只需使用np.concatenate

>>> np.concatenate([np.ones(10), np.ones(5)])
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
    1.,  1.])

答案 1 :(得分:1)

对于这些1d数组,

column vectors不是一个有用的描述符。

In [1668]: x=np.arange(10)
In [1669]: x.shape
Out[1669]: (10,)

默认显示为行(如果足够长,则分成行)

In [1670]: x
Out[1670]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

我必须添加一个额外的维度才能显示为列:

In [1671]: x[:,None]
Out[1671]: 
array([[0],
       [1],
       [2],
        ...
       [8],
       [9]])
In [1672]: _.shape
Out[1672]: (10, 1)

Plain concatenate将此形状端到端加入

In [1673]: np.concatenate((x,x)).shape
Out[1673]: (20,)

我们可以添加axis=0axis=-1或使用hstack来执行相同操作。

vstack垂直加入他们,但首先将每个人加入2d,例如(1,10),结果是(2,10):

In [1674]: np.vstack((x,x)).shape
Out[1674]: (2, 10)

那些numpy用户通过堆叠行来表示什么。

vstack适用于我的示例,因为2个数组具有相同的大小。在他们看来,他们有所不同。它试图在第一轴上连接(1,100)到(1,50)。