首页 > 解决方案 > numpy Reshaping 改变图像

问题描述

我有一个包含 2d 图像的 numpy 数组 X。numpy 数组维度是(1000,60,40)(1000=no.of img)。

我想将此数组提供给我的模型,但需要维度 (1000,60,40,1)(附加 1 表示通道数)。

所以我通过重塑数组

Y=X.reshape(1000,60,40,1)

因为我有错误的预测,所以我通过重新整形数组来检查它是否与我的 orig img 相同,我这样做了

Z=Y.reshape(1000,60,40)

我通过这样做将它们保存为PNG

for i in range(1000):
misc.imsave('img_rereshaped'+str(i)+'.png',Z[i])

它提供了一些 png 文件作为输出,但它们与 X numpy 数组中的相应原始文件不同

我是否以错误的方式重塑或重塑改变了输入数据并再次重塑重塑的数据会产生与原始数据不同的结果?

标签: pythonarraysnumpykeras

解决方案


要测试重塑是否导致问题,最好在不涉及其他潜在错误的情况下对其进行测试,例如misc.imsave()等。运行类似:

import numpy as np
a = np.random.rand(10,3)
b = np.reshape(a, [10, 3, 1])
c = np.reshape(b, [10, 3])
print(np.sum(c - a))

您会看到使用 reshape 来回切换不会导致问题。可能是您没有正确使用 PNG 保存。例如,该功能可能需要 3 个通道。尝试使用 matplotlib 在本地绘制它。


推荐阅读