2017-03-02 104 views
3

我要重塑以下數組:重塑一個數組的Python/numpy的

>>> test 
array([ 11., 12., 13., 14., 21., 22., 23., 24., 31., 32., 33., 
     34., 41., 42., 43., 44.]) 

,以獲得:

>>> test2 
array([[ 11., 12., 21., 22.], 
     [ 13., 14., 23., 24.], 
     [ 31., 32., 41., 42.], 
     [ 33., 34., 43., 44.]]) 

我有試過 「重塑」 像

>>> test.reshape(4,4) 
    array([[ 11., 12., 13., 14.], 
      [ 21., 22., 23., 24.], 
      [ 31., 32., 33., 34.], 
      [ 41., 42., 43., 44.]]) 

And

>>> test.reshape(2,2,2,2) 
    array([[[[ 11., 12.], 
       [ 13., 14.]], 

       [[ 25., 26.], 
       [ 27., 28.]]], 


       [[[ 39., 31.], 
       [ 32., 33.]], 

       [[ 41., 44.], 
       [ 45., 46.]]]]) 

我試過不同的組合,但沒有任何作品。

感謝

回答

5

與重塑和轉/換軸方法 -

m,n = 2,2 # Block size (rowxcol) 
rowlen = 4 # Length of row 
out = test.reshape(-1,m,rowlen//n,n).swapaxes(1,2).reshape(-1,rowlen) 
# Or transpose(0,2,1,3) 

採樣運行 -

In [104]: test 
Out[104]: 
array([ 11., 12., 13., 14., 21., 22., 23., 24., 31., 32., 33., 
     34., 41., 42., 43., 44.]) 

In [105]: m,n = 2,2 # Block size (rowxcol) 
    ...: rowlen = 4 # Length of row 
    ...: 

In [106]: test.reshape(-1,m,rowlen//n,n).swapaxes(1,2).reshape(-1,rowlen) 
Out[106]: 
array([[ 11., 12., 21., 22.], 
     [ 13., 14., 23., 24.], 
     [ 31., 32., 41., 42.], 
     [ 33., 34., 43., 44.]])