Numpy:沿指定轴重塑阵列

时间:2016-08-13 05:28:56

标签: python arrays numpy

我有以下数组:

x = np.arange(24).reshape((2,3,2,2))
array([[[[ 0,  1],
     [ 2,  3]],

    [[ 4,  5],
     [ 6,  7]],

    [[ 8,  9],
     [10, 11]]],


   [[[12, 13],
     [14, 15]],

    [[16, 17],
     [18, 19]],

    [[20, 21],
     [22, 23]]]])

我想将它重塑为(3,4,2)数组,如下所示:

array([[[ 0,  1],
    [ 2,  3],
    [12, 13],
    [14, 15]],

   [[ 4,  5],
    [ 6,  7],
    [16, 17],
    [18, 19]],

   [[ 8,  9],
    [10, 11],
    [20, 21],
    [22, 23]]])

我试过使用重塑,但它给了我以下不是我想要的。

array([[[ 0,  1],
    [ 2,  3],
    [ 4,  5],
    [ 6,  7]],

   [[ 8,  9],
    [10, 11],
    [12, 13],
    [14, 15]],

   [[16, 17],
    [18, 19],
    [20, 21],
    [22, 23]]])

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

使用transpose,然后使用reshape,就像这样 -

shp = x.shape
out = x.transpose(1,0,2,3).reshape(shp[1],-1,shp[-1])

答案 1 :(得分:1)

x = np.arange(24).reshape((2,3,2,2))
y = np.dstack(zip(x))[0]
print y

结果:

[[[ 0  1]
  [ 2  3]
  [12 13]
  [14 15]]

 [[ 4  5]
  [ 6  7]
  [16 17]
  [18 19]]

 [[ 8  9]
  [10 11]
  [20 21]
  [22 23]]]

答案 2 :(得分:0)

您也可以像这样使用concatenate-

out=np.concatenate((x),axis=1)

我会注意到那些,因为您提到这是为了提高性能,但这似乎并不比Divakar的建议快:

shp = x.shape
out = x.transpose(1,0,2,3).reshape(shp[1],-1,shp[-1])

如果有人愿意做基准测试或发现更快的东西,我很想知道。