python - 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 数组中的相应原始文件不同
我是否以错误的方式重塑或重塑改变了输入数据并再次重塑重塑的数据会产生与原始数据不同的结果?
解决方案
要测试重塑是否导致问题,最好在不涉及其他潜在错误的情况下对其进行测试,例如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 在本地绘制它。
推荐阅读
- mysql - Kusto ANY / ALL 运算符(大于列)
- oracle - Oracle apex 4.1 中的多个上传文件
- javascript - 如何使用 D3.js 处理 chrome 和 IE 中用于甜甜圈切片的路径字符串的分隔符?
- c# - 获取 ICommand 在 WPF 中执行的状态以更新 xaml 上的文本
- markdown - 将差异与降价一起使用
- c - 如何在不违反 MISRA 规则的情况下将位域变量分配给 uint8_t 变量?
- javascript - Javascript中带有值参数的HTML Google图表
- ios - INUIAddVoiceShortcutButton 的文本被截断
- laravel - Laravel 默认认证登录请求
- python - 有助于 Flask 分页