我有一个多维numpy数组,它正好是一个图像数组。为什么计算图像通道意味着在使用轴参数时产生不同的结果np.平均值?在
>>> 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
我期望平均值为平均值。为什么不是这样?剩下的3轴指数1、2和3也是如此。我是否误解了如何在中使用轴参数np.平均值?在
使用numpy版本“1.12.1”
我是否可能使float32收集器溢出?例如:
^{pr2}$这看起来差不多是对的。如果是这种情况,为什么slice方法不溢出累加器并给出相同的结果?也许slice方法使用float64累加器,而axis方法使用float32累加器?在
我无法准确再现您的结果,因为您没有提供您的数据,但我可以用随机数据重现问题:
这很可能是数值精度不够的情况。求和(9999*128*128=163823616)个浮点值,浮点32的相对精度为~10^-7,因此忽略了精度的边界。在
我建议您在调用mean之前尝试将数组强制转换为float64,它具有更高的精度,然后查看会发生什么。在
^{pr2}$相关问题 更多 >
编程相关推荐