我在Numpy中具有以下3D阵列:

a = np.array([[[1,2],[3,4]], [[5,6],[7,8]], [[9,10],[11,12]],[[13,14],[15,16]]])


当我写

b = np.reshape(a, [4,4])


二维结果数组看起来像

 [[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]
  [13 14 15 16]]


但是,我希望它具有以下形状:

 [[ 1  2  5  6]
  [ 3  4  7  8]
  [ 9 10 13 14]
  [11 12 15 16]]


如何在Python / Numpy中有效地做到这一点?

最佳答案

重新塑形以将第一根轴分为两个置换轴,再重新塑形-

a.reshape(2,2,2,2).transpose(0,2,1,3).reshape(4,4)
a.reshape(2,2,2,2).swapaxes(1,2).reshape(4,4)


使其通用,将成为-

m,n,r = a.shape
out = a.reshape(m//2,2,n,r).swapaxes(1,2).reshape(-1,2*r)


样品运行-

In [20]: a
Out[20]:
array([[[ 1,  2],
        [ 3,  4]],

       [[ 5,  6],
        [ 7,  8]],

       [[ 9, 10],
        [11, 12]],

       [[13, 14],
        [15, 16]]])

In [21]: a.reshape(2,2,2,2).swapaxes(1,2).reshape(4,4)
Out[21]:
array([[ 1,  2,  5,  6],
       [ 3,  4,  7,  8],
       [ 9, 10, 13, 14],
       [11, 12, 15, 16]])

关于python - 将3D Numpy阵列重塑为2D阵列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43547453/

10-12 23:25