1

如果我有两个 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)哪种工作,但输出很奇怪。

4

1 回答 1

0

你没有指定你真正想要的最终形状。如果是 (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)
于 2012-10-14T16:59:45.760 回答