【发布时间】:2017-12-13 02:47:42
【问题描述】:
我有一个多维 numpy 数组,它恰好是一个图像数组。为什么使用 np.mean 的轴参数计算图像通道均值会产生不同的结果?
>>> X = np.array(np.random.random((9999, 128, 128, 4)) * 1e5, dtype='float32')
>>> X.shape
(9999, 128, 128, 4)
>>> mean_by_axis = np.mean(X, axis=(0, 1, 2))
array([ 13423.11523438, 13423.11523438, 13423.11523438, 13423.11523438], dtype=float32)
>>> mean = np.mean(X[:, :, :, 0])
50001.297
我希望 mean_by_axis[0] == mean。为什么不是这样?其余轴 3 索引 1、2 和 3 也是如此。我是否误解了如何在 np.mean 中使用轴参数?
使用 numpy 版本 '1.12.1'
我是否有可能溢出 float32 累加器?例如:
>>> X = np.random.random(size=(100, 128, 128, 4))
>>> np.mean(X, axis=(0, 1, 2))
array([ 0.49978557, 0.49985835, 0.50000321, 0.50015689])]
>>> np.mean(X[:, :, :, 0])
0.49978556940636332
这看起来是正确的。如果是这种情况,为什么 slice 方法也不会溢出累加器并给出相同的结果?也许 slice 方法使用 float64 累加器,而 axis 方法使用 float32 累加器?
【问题讨论】:
-
我正在使用上面链接中描述的轴。我的问题与为什么轴结果与切片结果不同有关。
标签: python numpy image-processing