Numpy切片赋值归一化后数组数值与预期不一致问题求助
错误原因
- 数组类型隐式截断问题:你初始化
scaled时是直接从img拷贝生成,图片数组默认多为uint8类型(取值范围0~255),因此scaled初始dtype也会继承为uint8。对切片赋值时,右侧除以255得到的是浮点结果,但是赋值给uint8类型的数组时,NumPy会自动将浮点值截断取整为整数,数值已经发生失真。而test是拷贝数组后直接整体除以255,运算过程中数组会自动提升为浮点类型,不会发生截断,二者数值必然存在差异。 - 浮点数相等比较的精度问题:即便你提前将
scaled转换为浮点型避免了截断,直接用==对比浮点运算结果也很容易因为计算精度误差返回False,这类数值对比场景应该使用np.allclose()做近似相等判断。
修正示例代码
# 提前将scaled转换为浮点型,避免赋值截断 scaled = np.array(img, copy=True).astype(np.float32) test = np.array(img, copy=True) / 255 scaled[:, :, :, :3] = scaled[:, :, :, :3] / 255.0 print(np.allclose(scaled, test)) # 此时将返回True
内容的提问来源于stack exchange,提问作者taDachs
相关产品推荐
相关产品推荐

