np.sum不会返回精确的总和



考虑以下数字的numpy向量:

a = np.array([.1, .2, .2, .2, .2, .1])

显然,这些数字之和为1。但是,在计算时

b = np.sum(a)

我得到

print (b)
0.9999999999999999

你能解释一下为什么以及如何解决这个近似问题吗?

这是由于机器的浮点精度。这里详细解释如下:https://docs.python.org/3/tutorial/floatingpoint.html

您可以使用以下方法进行修复:

b = round(np.sum(a),5)
print(b)

您可以选择不同的数据类型来更改精度:

n = 1000
print(abs(1 - np.array([1 / n] * n).sum(dtype='float32')))
print(abs(1 - np.array([1 / n] * n).sum(dtype='float64')))
print(abs(1 - np.array([1 / n] * n).sum(dtype='float128')))

将产生:

1.1920928955078125e-07
4.440892098500626e-16
2.0816681711721685133e-17

相关内容

  • 没有找到相关文章

最新更新