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]],
我有一个由 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]],