我有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应该在行中堆叠吗?
答案 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)
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=0
或axis=-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)。