ndarray 的 numpy 堆栈行

numpy stack rows of ndarray

我有一个形状为 (u,v,w) 的 ndarray A,如下所示:

  [[[ 1.,  1.,  0.],
    [ 1.,  3.,  0.]],

   [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.]]]

我需要像这样将行(沿着维度 0)堆叠在一起。

[[1.,   1.,   0.,   0.,   0.,   0.],
 [1.,   3.,   0.,   0.,   0.,   0.]]

我该怎么做? 我知道如果只有两行我可以做 np.hstack((a[0], a[1])) 但是有没有办法在不将行转换为元组的情况下做到这一点?我想在theano中使用这段代码(因为numpy和theano的工作方式相似)

这应该可以正常工作:

np.hstack(a)

a[0], a[1], ... 是行而不是 a 的列。

所有 concatenate 函数族都遍历参数,无论它是列表、元组还是数组

In [318]: x=np.arange(12).reshape(2,2,3)

In [319]: x
Out[319]: 
array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

这些都是等价的:

In [320]: np.hstack([x[0],x[1]])
Out[320]: 
array([[ 0,  1,  2,  6,  7,  8],
       [ 3,  4,  5,  9, 10, 11]])

In [321]: np.hstack(x)
Out[321]: 
array([[ 0,  1,  2,  6,  7,  8],
       [ 3,  4,  5,  9, 10, 11]])

In [322]: np.concatenate([x1 for x1 in x],axis=1)
Out[322]: 
array([[ 0,  1,  2,  6,  7,  8],
       [ 3,  4,  5,  9, 10, 11]])

In [323]: np.concatenate(x,axis=1)
Out[323]: 
array([[ 0,  1,  2,  6,  7,  8],
       [ 3,  4,  5,  9, 10, 11]])

Reshape 可以生成形状正确但顺序错误的数组:

In [332]: x.reshape(2,6)
Out[332]: 
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]])

但如果我们先交换第一个 2 轴,则重塑有效:

In [333]: x.transpose(1,0,2).reshape(2,6)
Out[333]: 
array([[ 0,  1,  2,  6,  7,  8],
       [ 3,  4,  5,  9, 10, 11]])