numpy.allclose#
- numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)[source]#
如果两个数组在容差范围内逐元素相等,则返回 True。
容差值是正数,通常是非常小的数字。相对差 (rtol * abs(b)) 和绝对差 atol 相加后与 a 和 b 之间的绝对差进行比较。
警告
默认的 atol 不适用于比较数量级远小于 1 的数字(参见注释)。
如果 NaN 位于相同位置并且
equal_nan=True
,则将 NaN 视为相等。如果 Inf 位于相同位置并且在两个数组中符号相同,则将 Inf 视为相等。- 参数:
- a, barray_like
要比较的输入数组。
- rtolarray_like
相对容差参数(参见注释)。
- atolarray_like
绝对容差参数(参见注释)。
- equal_nanbool
是否将 NaN 比较为相等。如果为 True,则输出数组中 a 中的 NaN 将被视为与 b 中的 NaN 相等。
- 返回:
- allclosebool
如果两个数组在给定容差范围内相等,则返回 True;否则返回 False。
注释
如果以下等式在逐元素方面为 True,则 allclose 返回 True。
absolute(a - b) <= (atol + rtol * absolute(b))
上述等式在 a 和 b 中不对称,因此
allclose(a, b)
在某些极少数情况下可能与allclose(b, a)
不同。当参考值 b 的数量级小于 1 时,atol 的默认值并不适用。例如,
a = 1e-9
和b = 2e-9
不太可能被认为是“接近”的,但是使用默认设置时,allclose(1e-9, 2e-9)
为True
。请务必根据实际情况选择 atol,尤其是在定义阈值时,低于该阈值,a 中的非零值将被认为与 b 中的非常小或零值“接近”。a 和 b 的比较使用标准广播,这意味着 a 和 b 不需要具有相同的形状才能使
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