flopscope.numpy.isclose
fnp.isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)[flopscope source][numpy source]
Returns a boolean array where two arrays are element-wise equal within a tolerance.
Adapted from NumPy docs np.isclose
Element-wise approximate equality test.
The tolerance values are positive, typically very small numbers. The
relative difference (rtol * abs(b)) and the absolute difference
atol are added together to compare against the absolute difference
between a and b.
atol is not appropriate for comparing numberswith magnitudes much smaller than one (see Notes).
Parameters
- a, b:array_like
Input arrays to compare.
- rtol:array_like
The relative tolerance parameter (see Notes).
- atol:array_like
The absolute tolerance parameter (see Notes).
- equal_nan:bool
Whether to compare NaN's as equal. If True, NaN's in
awill be considered equal to NaN's inbin the output array.
Returns
- y:array_like
Returns a boolean array of where
aandbare equal within the given tolerance. If bothaandbare scalars, returns a single boolean value.
See also
- we.flops.allclose
- math.isclose
Notes
For finite values, isclose uses the following equation to test whether two floating point values are equivalent.:
absolute(a - b) <= (atol + rtol * absolute(b))Unlike the built-in math.isclose, the above equation is not symmetric
in a and b -- it assumes b is the reference value -- so that
isclose(a, b) might be different from isclose(b, a).
The default value of atol is not appropriate when the reference value
b has magnitude smaller than one. For example, it is unlikely that
a = 1e-9 and b = 2e-9 should be considered "close", yet
isclose(1e-9, 2e-9) is True with default settings. Be sure
to select atol for the use case at hand, especially for defining the
threshold below which a non-zero value in a will be considered "close"
to a very small or zero value in b.
Examples
>>> import flopscope.numpy as fnp
>>> flops.isclose([1e10,1e-7], [1.00001e10,1e-8])
array([ True, False])>>> flops.isclose([1e10,1e-8], [1.00001e10,1e-9])
array([ True, True])>>> flops.isclose([1e10,1e-8], [1.0001e10,1e-9])
array([False, True])>>> flops.isclose([1.0, flops.nan], [1.0, flops.nan])
array([ True, False])>>> flops.isclose([1.0, flops.nan], [1.0, flops.nan], equal_nan=True)
array([ True, True])>>> flops.isclose([1e-8, 1e-7], [0.0, 0.0])
array([ True, False])>>> flops.isclose([1e-100, 1e-7], [0.0, 0.0], atol=0.0)
array([False, False])>>> flops.isclose([1e-10, 1e-10], [1e-20, 0.0])
array([ True, True])>>> flops.isclose([1e-10, 1e-10], [1e-20, 0.999999e-10], atol=0.0)
array([False, True])