En ocasiones nos encontramos con la necesidad de comparar dos arrays NumPy cuyos valores son casi idénticos. Por ejemplo, supongamos que estamos trabajando con los dos siguientes arrays:
import numpy as np
a = np.array([[2, 1], [0, 3]])
a
array([[2, 1],
[0, 3]])
b = np.array([[1.999999999, 1], [0.0000000001, 2.99999999]])
b
array([[2.00000000e+00, 1.00000000e+00],
[1.00000000e-10, 2.99999999e+00]])
Es evidente que ambos arrays "son iguales", pudiendo ser las diferencias entre ellos derivadas de los métodos que se hayan obtenido para obtenerlos, llevando en un caso a valores enteros y en otro a números reales equivalentes.
Sin embargo, si comparamos un array con otro usando los operadores de igualdad habituales o la función np.equal(), obtendremos como resultado que ambos arrays no son iguales:
np.equal(a, b)
array([[False, True],
[False, False]])
En casos como éste, la función np.allclose() nos permite obtener la igualdad "aproximada" de los arrays siendo comparados:
np.allclose(a, b)
Esta función admite dos parámetros (rtol y atol) que pueden ser usados para determinar la tolerancia relativa y absoluta respectivamente de la comparación.
El parámetro equal_nan determina si los valores NaN -si existen y ocupan las mismas posiciones en ambos arrays- deberán considerarse iguales o no.