numpy.allclose() 比较数组和浮点数
numpy.allclose() compare arrays with floating points
我有两个 numpy 数组:
g1 = np.array([3118740.3553, 3520175.8121])
g2 = np.array([3118740.8553, 3520176.3121])
我想使用 numpy.allclose()
来测试这些数组在浮点精度公差范围内是否相同
np.allclose(g1, g2, atol=1e-7)
奇怪的是 returns 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
returns 正确。
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
我有两个 numpy 数组:
g1 = np.array([3118740.3553, 3520175.8121])
g2 = np.array([3118740.8553, 3520176.3121])
我想使用 numpy.allclose()
来测试这些数组在浮点精度公差范围内是否相同
np.allclose(g1, g2, atol=1e-7)
奇怪的是 returns 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
returns 正确。
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