如何将多维数组重塑为二维图像?

How to reshape a multidimensional array to a 2D image?

我正在处理如下形状的数组

(64, 1, 64, 64)

这实际上是一张灰度图,被分割成64个patch,每个patch有64*64px。

现在我需要将其重建为 512*512px 的图像。

我试过使用

np.reshape(arr, (512, 512))

当然,生成的图像并不像预期的那样。

我该如何解决这个问题?

这取决于你的补丁是如何排列的。但你可以尝试的第一件事是

image.reshape(8, 8, 64, 64).swapaxes(1, 2).reshape(512, 512)

这是假设原始第零维逐行列出补丁,即0-7是从左到右的第一行补丁,8-15是第二行,依此类推。

第一个 reshape 重新建立该排列,在它为轴 0 和 1 选择索引 i、j 后寻址第 i+1 行中的第 j+1 个补丁。

有趣的是:当通过重塑合并轴时:

  • 只能合并相邻维度
  • 每个块中除最右边的轴外的所有轴都将被分散

因为我们想把每个补丁放在一起,所以我们必须重新排列,使当前轴 2 和 3 成为块的最右边成员。这就是 swapaxes 所做的。

此时形状为 (8, 64, 8, 64),轴 1 和轴 3 为面片内坐标。剩下要做的就是合并两对 ( 8, 64 -> 512 8, 64 -> 512 )