Evaluación de la proximidad de los valores de dos arrays NumPy

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)

True

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.

Categoría
Submitted by admin on Sun, 06/21/2020 - 19:59