Python中的 numpy.allclose()
numpy.allclose()
函数用于查找两个数组是否在容差范围内按元素相等。公差值是正的,通常是非常小的数字。将相对差 (rtol * abs(arr2)) 和绝对差atol相加,以与arr1和arr2之间的绝对差进行比较。如果任一数组包含一个或多个 NaN,则返回 False。如果 Inf 在两个数组中位于相同的位置并且具有相同的符号,则它们被视为相等。
如果以下等式按元素为 True,则 allclose 返回 True。
absolute(arr1 - arr2) <= (atol + rtol * absolute(arr2))
由于,上述方程在 arr1 和 arr2 中不对称,因此,在极少数情况下, allclose(arr1, arr2) 可能与 allclose(arr2, arr1) 不同。
Syntax : numpy.allclose(arr1, arr2, rtol, atol, equal_nan=False)
Parameters :
arr1 : [array_like] Input 1st array.
arr2 : [array_like] Input 2nd array.
rtol : [float] The relative tolerance parameter.
atol : [float] The absolute tolerance parameter.
equal_nan : [bool] Whether to compare NaN’s as equal. If True, NaN’s in arr1 will be considered equal to NaN’s in arr2 in the output array.
Return : [ bool] Returns True if the two arrays are equal within the given tolerance, otherwise it returns False.
代码#1:
# Python program explaining
# allclose() function
import numpy as geek
# input arrays
in_arr1 = geek.array([5e5, 1e-7, 4.000004e6])
print ("1st Input array : ", in_arr1)
in_arr2 = geek.array([5.00001e5, 1e-7, 4e6])
print ("2nd Input array : ", in_arr2)
# setting the absolute and relative tolerance
rtol = 1e-05
atol = 1e-08
res = geek.allclose(in_arr1, in_arr2, rtol, atol)
print ("Are the two arrays are equal within the tolerance: \t", res)
1st Input array : [ 5.00000000e+05 1.00000000e-07 4.00000400e+06]
2nd Input array : [ 5.00001000e+05 1.00000000e-07 4.00000000e+06]
Are the two arrays are equal within the tolerance: True
代码#2:
# Python program explaining
# allclose() function
import numpy as geek
# input arrays
in_arr1 = geek.array([5e5, 1e-7, 4.000004e6])
print ("1st Input array : ", in_arr1)
in_arr2 = geek.array([5.00001e5, 1e-7, 4e6])
print ("2nd Input array : ", in_arr2)
# setting the absolute and relative tolerance
rtol = 1e-06
atol = 1e-09
res = geek.allclose(in_arr1, in_arr2, rtol, atol)
print ("Are the two arrays are equal within the tolerance: \t", res)
1st Input array : [5000000.0, 1e-07, 40000004.0]
2nd Input array : [5000001.0, 1e-07, 40000000.0]
Are the two arrays are equal within the tolerance: True
代码#3:
# Python program explaining
# allclose() function
import numpy as geek
# input arrays
in_arr1 = geek.array([5e5, 1e-7, geek.nan])
print ("1st Input array : ", in_arr1)
in_arr2 = geek.array([5e5, 1e-7, geek.nan])
print ("2nd Input array : ", in_arr2)
# setting the absolute and relative tolerance
rtol = 1e-06
atol = 1e-09
res = geek.allclose(in_arr1, in_arr2, rtol, atol)
print ("Are the two arrays are equal within the tolerance: \t", res)
1st Input array : [500000.0, 1e-07, nan]
2nd Input array : [500000.0, 1e-07, nan]
Are the two arrays are equal within the tolerance: False
代码#4:
# Python program explaining
# allclose() function
import numpy as geek
# input arrays
in_arr1 = geek.array([5e5, 1e-7, geek.nan])
print ("1st Input array : ", in_arr1)
in_arr2 = geek.array([5e5, 1e-7, geek.nan])
print ("2nd Input array : ", in_arr2)
# setting the absolute and relative tolerance
rtol = 1e-06
atol = 1e-09
res = geek.allclose(in_arr1, in_arr2, rtol, atol,
equal_nan = True)
print ("Are the two arrays are equal within the tolerance: \t", res)
1st Input array : [500000.0, 1e-07, nan]
2nd Input array : [500000.0, 1e-07, nan]
Are the two arrays are equal within the tolerance: True