用python重塑数组

Die*_*oDZ 2 python arrays numpy reshape

我有阵列

A = array([[  1.,   2.,   3.,  10.,  11.,  12.],
           [  4.,   5.,   6.,  13.,  14.,  15.],
           [  7.,   8.,   9.,  16.,  17.,  18.],
           [ 19.,  20.,  21.,  28.,  29.,  30.],
           [ 22.,  23.,  24.,  31.,  32.,  33.],
           [ 25.,  26.,  27.,  34.,  35.,  36.]])
Run Code Online (Sandbox Code Playgroud)

我想重塑它以获得

B = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]
Run Code Online (Sandbox Code Playgroud)

我试过了

>>> B = A.reshape(1,36)
array([[  1.,   2.,   3.,  10.,  11.,  12.,   4.,   5.,   6.,  13.,  14.,
         15.,   7.,   8.,   9.,  16.,  17.,  18.,  19.,  20.,  21.,  28.,
         29.,  30.,  22.,  23.,  24.,  31.,  32.,  33.,  25.,  26.,  27.,
         34.,  35.,  36.]])
Run Code Online (Sandbox Code Playgroud)

但是,显然,我没有达到结果.我的实际数据与示例不同,因此我无法对数组A进行排序以获取B.

我想我需要更多重塑......

Div*_*kar 5

拆分这两个轴中的2每一个,使其余的轴长度各reshape给一个4D阵列然后交换中间的两个轴,np.swapaxes()最后用np.ravel()-

A.reshape(2,3,2,3).swapaxes(1,2).ravel()
Run Code Online (Sandbox Code Playgroud)

一般地说 -

m,n = A.shape
A.reshape(2,m//2,2,n//2).swapaxes(1,2).ravel()
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [15]: A
Out[15]: 
array([[  1.,   2.,   3.,  10.,  11.,  12.],
       [  4.,   5.,   6.,  13.,  14.,  15.],
       [  7.,   8.,   9.,  16.,  17.,  18.],
       [ 19.,  20.,  21.,  28.,  29.,  30.],
       [ 22.,  23.,  24.,  31.,  32.,  33.],
       [ 25.,  26.,  27.,  34.,  35.,  36.]])

In [16]: A.reshape(2,3,2,3).swapaxes(1,2).ravel()
Out[16]: 
array([  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,  11.,
        12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,  22.,
        23.,  24.,  25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,  33.,
        34.,  35.,  36.])
Run Code Online (Sandbox Code Playgroud)