gpt4 book ai didi

python - numpy.allclose() 比较数组和 float

转载 作者:行者123 更新时间:2023-12-02 00:15:28 26 4
gpt4 key购买 nike

我有两个 numpy 数组:

g1 = np.array([3118740.3553, 3520175.8121])
g2 = np.array([3118740.8553, 3520176.3121])

我想使用 numpy.allclose() 来测试这些数组在浮点精度公差范围内是否相同

np.allclose(g1, g2, atol=1e-7)

奇怪的是,即使这两个数组之间的差异很大,它也会返回 True。为什么?

最佳答案

call signature of np.allclose

In [4]: np.allclose?
Signature: np.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)

请注意,rtol(相对公差)的默认值为 1e-05。只要

abs(a[i] - b[i]) <= rtol * abs(b[i]) + atol

对于所有 i = 0, ..., len(a),然后 np.allclose 返回 True。

In [11]: rtol, atol = 1e-05, 1e-7

In [12]: [abs(ai - bi) < rtol * abs(bi) + atol for ai, bi in zip(g1, g2)]
Out[12]: [True, True]

由于 g2 中的值很大,即使是很小的 rtol 也会导致相当大的容差:

In [14]: rtol * g2.min()
Out[14]: 31.187408553

如果您不想包含相对公差,则必须将其设置为零以覆盖默认值:

In [13]: np.allclose(g1, g2, rtol=0, atol=1e-7)
Out[13]: False

关于python - numpy.allclose() 比较数组和 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063555/

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