numpy.allclose#

numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)[source]#

如果两个数组在容差范围内逐元素相等,则返回 True。

容差值是正数,通常是非常小的数字。相对差 (rtol * abs(b)) 和绝对差 atol 相加以与 ab 之间的绝对差进行比较。

警告

默认的 atol 不适用于比较大小远小于 1 的数字(请参阅注释)。

如果 NaN 位于相同的位置并且 equal_nan=True,则将其视为相等。如果 Inf 位于相同的位置并且两个数组中的符号相同,则将其视为相等。

参数:
a, barray_like

要比较的输入数组。

rtolarray_like

相对容差参数(请参阅注释)。

atolarray_like

绝对容差参数(请参阅注释)。

equal_nanbool

是否将 NaN 视为相等。如果为 True,则输出数组中 a 中的 NaN 将被视为与 b 中的 NaN 相等。

版本 1.10.0 中的新功能。

返回值:
allclosebool

如果两个数组在给定容差范围内相等,则返回 True;否则返回 False。

另请参阅

isclose, all, any, equal

注释

如果以下等式逐元素为 True,则 allclose 返回 True。

absolute(a - b) <= (atol + rtol * absolute(b))

上述等式在 ab 中不是对称的,因此在某些罕见情况下,allclose(a, b) 可能与 allclose(b, a) 不同。

当参考值 b 的大小小于 1 时,atol 的默认值不合适。例如,a = 1e-9b = 2e-9 不太可能被认为是“接近”的,但使用默认设置时,allclose(1e-9, 2e-9)True。请务必根据手头的用例选择 atol,尤其是在定义 a 中非零值何时被认为与 b 中非常小或零的值“接近”的阈值时。

ab 的比较使用标准广播,这意味着 ab 不需要具有相同的形状才能使 allclose(a, b) 评估为 True。对于 equal 也是如此,但对于 array_equal 则不然。

对于非数值数据类型,allclose 未定义。为此目的,bool 被视为数值数据类型。

示例

>>> import numpy as np
>>> np.allclose([1e10,1e-7], [1.00001e10,1e-8])
False
>>> np.allclose([1e10,1e-8], [1.00001e10,1e-9])
True
>>> np.allclose([1e10,1e-8], [1.0001e10,1e-9])
False
>>> np.allclose([1.0, np.nan], [1.0, np.nan])
False
>>> np.allclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)
True