vstack numpy数组

时间:2012-10-14 16:48:04

标签: numpy

如果我有两个ndarray:

a.shape   # returns (200,300, 3)
b.shape   # returns (200, 300)

numpy.vstack((a,b))  # Gives error

会打印出错误:     ValueError:数组必须具有相同的维数

我尝试做vstack((a.reshape(-1,300), b)哪种工作,但输出非常奇怪。

1 个答案:

答案 0 :(得分: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)