flopscope.numpy.allclose
fnp.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)[flopscope source][numpy source]
Returns True if two arrays are element-wise equal within a tolerance.
Adapted from NumPy docs np.allclose
Element-wise tolerance check; cost = numel(a).
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).
NaNs are treated as equal if they are in the same place and if
equal_nan=True. Infs are treated as equal if they are in the same
place and of the same sign in both arrays.
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
- allclose:bool
Returns True if the two arrays are equal within the given tolerance; False otherwise.
See also
Notes
If the following equation is element-wise True, then allclose returns True.:
absolute(a - b) <= (atol + rtol * absolute(b))The above equation is not symmetric in a and b, so that
allclose(a, b) might be different from allclose(b, a) in
some rare cases.
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
allclose(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.
The comparison of a and b uses standard broadcasting, which
means that a and b need not have the same shape in order for
allclose(a, b) to evaluate to True. The same is true for
equal but not array_equal.
allclose is not defined for non-numeric data types.
bool is considered a numeric data-type for this purpose.
Examples
>>> import flopscope.numpy as fnp
>>> flops.allclose([1e10,1e-7], [1.00001e10,1e-8])
False>>> flops.allclose([1e10,1e-8], [1.00001e10,1e-9])
True>>> flops.allclose([1e10,1e-8], [1.0001e10,1e-9])
False>>> flops.allclose([1.0, flops.nan], [1.0, flops.nan])
False>>> flops.allclose([1.0, flops.nan], [1.0, flops.nan], equal_nan=True)
True