Numpy - 重塑二维数组并保持秩序

Numpy - Reshape 2d array and keep order

我有一个由 64 个数字组成的数组,使用 x = np.arange(64).reshape(8, 8) 排列成 8x8,我想将其重塑为具有 2x2 子数组的 4x4 数组。 IE。这个original array should become this.

使用 x = x.reshape(4,4,2,2) 简单地重塑数组会导致 this outcome

我该如何克服这个问题?

谢谢

您需要稍微重新排列坐标轴以符合您的预期结果。在这种情况下,您已将每条 8 长的边拆分为 4 个 2 块,但随后需要最终维度中的 2 个块。所以:

np.arange(64).reshape(4,2,4,2).transpose(0,2,1,3)
Out[]: 
array([[[[ 0,  1],
         [ 8,  9]],

        [[ 2,  3],
         [10, 11]],

        [[ 4,  5],
         [12, 13]],

        [[ 6,  7],
         [14, 15]]],


       [[[16, 17],
         [24, 25]],

        [[18, 19],
         [26, 27]],

        [[20, 21],
         [28, 29]],

        [[22, 23],
         [30, 31]]],


       [[[32, 33],
         [40, 41]],

        [[34, 35],
         [42, 43]],

        [[36, 37],
         [44, 45]],

        [[38, 39],
         [46, 47]]],


       [[[48, 49],
         [56, 57]],

        [[50, 51],
         [58, 59]],

        [[52, 53],
         [60, 61]],

        [[54, 55],
         [62, 63]]]])

另一种方法是使用 sliding_window:

y = np.lib.stride_tricks.sliding_window_view(x, (2,2))[::2, ::2]
y
array([[[[ 0,  1],
         [ 8,  9]],

        [[ 2,  3],
         [10, 11]],

        [[ 4,  5],
         [12, 13]],

        [[ 6,  7],
         [14, 15]]],


       [[[16, 17],
         [24, 25]],