如何将多维数组重塑为二维图像?
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 )
。
我正在处理如下形状的数组
(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 )
。