如果我有两个 ndarray:
a.shape # returns (200,300, 3)
b.shape # returns (200, 300)
numpy.vstack((a,b)) # Gives error
会打印出错误:ValueError: arrays must have the same number of dimensions
我试过做vstack((a.reshape(-1,300), b)
哪种工作,但输出很奇怪。
如果我有两个 ndarray:
a.shape # returns (200,300, 3)
b.shape # returns (200, 300)
numpy.vstack((a,b)) # Gives error
会打印出错误:ValueError: arrays must have the same number of dimensions
我试过做vstack((a.reshape(-1,300), b)
哪种工作,但输出很奇怪。
你没有指定你真正想要的最终形状。如果是 (200, 300, 4),则可以dstack
改用:
>>> import numpy as np
>>> a = np.random.random((200,300,3))
>>> b = np.random.random((200,300))
>>> c = np.dstack((a,b))
>>> c.shape
(200, 300, 4)
基本上,当您堆叠时,所有其他轴的长度必须一致。
[根据评论更新:]
如果你想要 (800, 300) 你可以尝试这样的事情:
>>> a = np.ones((2, 3, 3)) * np.array([1,2,3])
>>> b = np.ones((2, 3)) * 4
>>> c = np.dstack((a,b))
>>> c
array([[[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]],
[[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]]])
>>> c.T.reshape(c.shape[0]*c.shape[-1], -1)
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.],
[ 2., 2., 2.],
[ 3., 3., 3.],
[ 3., 3., 3.],
[ 4., 4., 4.],
[ 4., 4., 4.]])
>>> c.T.reshape(c.shape[0]*c.shape[-1], -1).shape
(8, 3)