gpt4 book ai didi

python - 使用 Numpy 在 Python 中使用 float 舍入错误

转载 作者:太空狗 更新时间:2023-10-30 02:45:13 36 4
gpt4 key购买 nike

我遇到了一个问题,我认为这与使用 float 和精度有关,但我不是很精通所涉及的各种复杂问题。我是一个数学家,在我看来,我还不如只是在黑板上处理小数。我将开始对此进行研究,但与此同时,我想知道是否有任何处理 float 的通用技术可以解决我将在下面概述的问题。

我有一个 numpy 小数数组,我想将其四舍五入到最接近的 .02。我最初是通过将数组的每个元素除以 .02,对结果进行四舍五入,然后再次乘以 .02 来完成此操作的。实际数据是由一些处理输入的代码生成的,但这说明了问题:

x = np.array([.45632, .69722, .40692])
xx = np.round(x/.02)*.02

它似乎正确地将所有内容四舍五入,正如我可以检查的那样:

xx
array([0.46, 0.7, 0.4])

但是,如果我检查第一个和第二个元素,我会得到:

xx[0]
0.46000000000000002
xx[1]
0.70000000000000007

数组中的每个元素都是 numpy.float64 类型。稍后会出现问题,因为我将这些数字与比较运算符结合起来以选择数据的子集,然后发生的事情有点不可预测:

xx[0] == .46
True

但是,

xx[1] == .70
False

正如我所说,我有一个解决这个特定应用程序的方法,但我想知道是否有人有办法使我的第一种方法起作用,或者是否有处理这些类型的数字的技术更通用我应该知道。

最佳答案

而不是使用 ==要选择数据子集,请尝试使用 numpy.isclose() .这允许您为比较指定相对/绝对公差 (absolute(a - b) <= (atol + rtol * absolute(b)))

关于python - 使用 Numpy 在 Python 中使用 float 舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25497889/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com