How to reshape () the sum of odd and even rows in

2019-03-02 07:42发布

问题:

Example1 :

a = np.array([[[1,11,111],[2,22,222]],
              [[3,33,333],[4,44,444]],
              [[5,55,555],[6,66,666]],[[7,77,777],[8,88,888]]])

>>> a
array([[[  1,  11, 111],
    [  2,  22, 222]],

   [[  3,  33, 333],
    [  4,  44, 444]],

   [[  5,  55, 555],
    [  6,  66, 666]],

   [[  7,  77, 777],
    [  8,  88, 888]]])

i want reshape() 2D-array and combine odd rows and even rows.

Desired result :

[[1, 11, 111, 3, 33, 333, 5, 55, 555, 7, 77, 777],
 [2, 22, 222, 4, 44, 444, 6, 66, 666, 8, 88, 888]]

How can I make the output like above?

回答1:

Permute axes and reshape to 2D -

In [14]: a
Out[14]: 
array([[[  1,  11, 111],
        [  2,  22, 222]],

       [[  3,  33, 333],
        [  4,  44, 444]],

       [[  5,  55, 555],
        [  6,  66, 666]],

       [[  7,  77, 777],
        [  8,  88, 888]]])

In [15]: a.swapaxes(0,1).reshape(a.shape[1],-1)
Out[15]: 
array([[  1,  11, 111,   3,  33, 333,   5,  55, 555,   7,  77, 777],
       [  2,  22, 222,   4,  44, 444,   6,  66, 666,   8,  88, 888]])


回答2:

>>> np.array(list(zip(*a))).reshape(2,12)
array([[  1,  11, 111,   3,  33, 333,   5,  55, 555,   7,  77, 777],
       [  2,  22, 222,   4,  44, 444,   6,  66, 666,   8,  88, 888]])