使用 python 重塑数组

Reshape arrays with python

我有数组

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.]])

我想重塑它以获得

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]

我试过了

>>> 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.]])

但是,显然,我没有达到结果。我的真实数据和例子不一样,所以无法对数组A进行排序得到B.

我想我需要更多的整形...

拆分这两个轴中的每一个,使其余轴的长度为 2,每个轴都有一个 reshape 给我们一个 4D 数组,然后将中间两个轴与 np.swapaxes() 最后用 np.ravel() -

压平
A.reshape(2,3,2,3).swapaxes(1,2).ravel()

一般来说-

m,n = A.shape
A.reshape(2,m//2,2,n//2).swapaxes(1,2).ravel()

样本运行-

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.])