📜  Python中的 numpy.allclose()

📅  最后修改于: 2022-05-13 01:54:37.484000             🧑  作者: Mango

Python中的 numpy.allclose()

numpy.allclose()函数用于查找两个数组是否在容差范围内按元素相等。公差值是正的,通常是非常小的数字。将相对差 (rtol * abs(arr2)) 和绝对差atol相加,以与arr1arr2之间的绝对差进行比较。如果任一数组包含一个或多个 NaN,则返回 False。如果 Inf 在两个数组中位于相同的位置并且具有相同的符号,则它们被视为相等。

如果以下等式按元素为 True,则 allclose 返回 True。
absolute(arr1 - arr2) <= (atol + rtol * absolute(arr2))
由于,上述方程在 arr1 和 arr2 中不对称,因此,在极少数情况下, allclose(arr1, arr2) 可能与 allclose(arr2, arr1) 不同。

代码#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