array1.shape
给出(180,)
array2.shape
给出(180,1)
这两者之间的区别是什么? 由于这种差异,我无法使用
堆叠它们np.vstack((array2, array1))
我应该对array1的形状进行哪些更改,以便我可以将它们叠加起来?
答案 0 :(得分:3)
让我们定义一些数组:
>>> x = np.zeros((4, 1))
>>> y = np.zeros((4))
原样,这些数组无法堆叠:
>>> np.vstack((x, y))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/numpy/core/shape_base.py", line 230, in vstack
return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
ValueError: all the input array dimensions except for the concatenation axis must match exactly
但是,通过简单的更改,它们将堆叠:
>>> np.vstack((x, y[:, None]))
array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])
可替换地:
>>> np.vstack((x[:, 0], y))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
答案 1 :(得分:0)
In [81]: x1=np.ones((10,)); x2=np.ones((10,1))
一个数组是1d,另一个是2d。 vertical
堆栈需要2个维度,垂直和水平。因此np.vstack
通过np.atleast_2d
传递每个输入:
In [82]: np.atleast_2d(x1).shape
Out[82]: (1, 10)
但是现在我们有一个(1,10)数组和一个(10,1) - 它们不能在任何一个轴上连接。
但是,如果我们重塑x1
所以它是(10,1)
,那么我们就可以在x2
的任何一个方向加入它:
In [83]: np.concatenate((x1[:,None],x2), axis=0).shape
Out[83]: (20, 1)
In [84]: np.concatenate((x1[:,None],x2), axis=1).shape
Out[84]: (10, 2)
打印出两个阵列:
In [86]: x1
Out[86]: array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
In [87]: x2
Out[87]:
array([[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.],
[ 1.]])
如何在不进行某种调整的情况下连接这两种形状?