重塑 numpy 数组以包含来自原始数组的逻辑值块

Reshape numpy array to contain logical blocks of values from original array

我的google-fu让我失望了!

我有一个 numpy 数组如下:

    0     1     2     3
  ------------------------
0 | 100   110   120   130   
1 | 140   150   160   170
2 | 180   190   200   210
3 | 220   230   240   250
4 | 260   270   280   290
5 | 300   310   320   330
6 | 340   350   360   370
7 | 380   390   400   410
8 | 420   430   440   450

其形状为(9, 4)。我想将上面的数组重塑为以下 (6, 6) 数组:

    0     1     2     3     4     5
  -------------------------------------
0 | 100   110 | 140   150 | 180   190
1 | 120   130 | 160   170 | 200   210
  -------------------------------------
2 | 220   230 | 260   270 | 300   310
3 | 240   250 | 280   290 | 320   330
  -------------------------------------
4 | 340   350 | 380   390 | 420   430
5 | 360   370 | 400   410 | 440   450

我可以用 2 个 for 循环和一些条件来完成。有没有更好的方法在一行代码中使用 numpy.reshape 实现相同的结果?

提前致谢。

实际上它是一个由 (2, 2) 个数组组成的 (3, 3) 数组,因此首先将其整形为 (3, 3, 2, 2) 个数组。

然后转置它,使轴正确,以便将它重新组合成一个 (6, 6) 数组:

a.reshape(3, 3, 2, 2).transpose([0,2,1,3]).reshape(6,6)

我做了类似但可能更直观的事情:

a = np.arange(36).reshape([9,4])
>>>
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],
       [24, 25, 26, 27],
       [28, 29, 30, 31],
       [32, 33, 34, 35]])

b = np.hstack(np.column_stack(a.reshape([3,3,2,2])))
>>>
array([[ 0,  1,  4,  5,  8,  9],
       [ 2,  3,  6,  7, 10, 11],
       [12, 13, 16, 17, 20, 21],
       [14, 15, 18, 19, 22, 23],
       [24, 25, 28, 29, 32, 33],
       [26, 27, 30, 31, 34, 35]])