• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • Python
  • Pandas
  • NumPy
  • Matlab
  • Julia
  • Excel
  • IA Generativa

Comparación de arrays en NumPy: Uso de np.allclose() y np.isclose() para comparaciones con tolerancia

enero 13, 2025 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

NumPy

Cuando se trabaja con datos, comparar valores se convierte en una tarea frecuente. Sin embargo, en muchos casos, aunque los valores deberían ser iguales, no lo son debido a errores de redondeo o imprecisiones derivadas de la representación de números en punto flotante. Esto puede hacer que las comparaciones directas arrojen resultados incorrectos, lo que obliga a adoptar estrategias alternativas para realizar la comparación de arrays en NumPy.

Una solución común a este problema es realizar comparaciones con tolerancia, una técnica que permite establecer márgenes de error aceptables. Para ello, NumPy ofrece funciones como np.isclose() y np.allclose(), diseñadas para comparar valores o arrays considerando una tolerancia definida por el usuario. Estas herramientas son ideales para manejar las imprecisiones inherentes a los cálculos numéricos y asegurar comparaciones más fiables.

En esta entrada, se explorará cómo funcionan estas funciones, por qué son importantes y algunos casos prácticos donde resultan especialmente útiles.

Tabla de contenidos

  • 1 Introducción al problema: Comparación de valores en punto flotante
  • 2 Solución en NumPy: Uso de np.isclose() y np.allclose()
    • 2.1 ¿Qué hacen estas funciones?
    • 2.2 Parámetros clave de np.isclose() y np.allclose()
    • 2.3 Ventajas para la comparación de arrays en NumPy
  • 3 Ejemplos prácticos
    • 3.1 Comparar dos valores con np.isclose()
    • 3.2 Comparar arrays elemento a elemento
    • 3.3 Verificar arrays completos con np.allclose()
    • 3.4 Ajustar la tolerancia en la comparación de arrays en NumPy
  • 4 Conclusiones

Introducción al problema: Comparación de valores en punto flotante

Cuando se trabaja con números en punto flotante, no siempre es posible representarlos con precisión absoluta. Esto se debe a la forma en que las computadoras procesan los números reales, lo que puede generar pequeños errores en operaciones como divisiones, exponentes o raíces cuadradas. Estos errores, aunque inicialmente mínimos, pueden acumularse y amplificarse en cálculos posteriores.

¡Nuevo video! Aprende a seleccionar datos en Pandas con .iloc y .loc
En Analytics Lane
¡Nuevo video! Aprende a seleccionar datos en Pandas con .iloc y .loc

Por ejemplo, una operación matemática que debería producir exactamente el valor 0.3 podría generar un resultado como 0.30000000000000004. Aunque la diferencia es insignificante, comparar este resultado con 0.3 utilizando una igualdad exacta (==) devolverá False, lo que puede conducir a conclusiones erróneas en los análisis.

El problema se agrava al trabajar con arrays, ya que basta con que uno de los valores tenga una discrepancia numérica para que la comparación completa del array falle. Esto dificulta la obtención de conclusiones precisas y fiables cuando se dependen de dichas comparaciones.

Publicidad


Solución en NumPy: Uso de np.isclose() y np.allclose()

Para resolver el problema de comparar números reales con tolerancia, NumPy ofrece dos funciones: np.isclose() y np.allclose(). Estas herramientas permiten realizar comparaciones más robustas y evitar errores derivados de las imprecisiones en los números en punto flotante.

¿Qué hacen estas funciones?

Aunque ambas comparten el objetivo de comparar valores considerando tolerancias, su uso difiere:

  • np.isclose(): Compara elemento por elemento entre dos arrays y devuelve un array booleano, donde cada posición indica si los valores correspondientes están “lo suficientemente cercanos” dentro de la tolerancia definida.
  • np.allclose(): Evalúa si todos los elementos de dos arrays son cercanos dentro de la tolerancia y devuelve un único valor booleano (True o False). Es útil para realizar la validación de los arrays en generar en lugar de cada uno de los elementos.

Publicidad


Parámetros clave de np.isclose() y np.allclose()

Ambas funciones permiten personalizar la tolerancia a través de dos parámetros:

  • rtol (tolerancia relativa): Especifica la tolerancia relativa en función del valor esperado. Controla cuánto puede variar un valor proporcionalmente al valor de referencia.
  • atol (tolerancia absoluta): Define un límite absoluto para las diferencias, útil cuando los valores esperados son pequeños o cercanos a cero.

Los valores predeterminados son rtol=1e-5 y atol=1e-8, pero pueden ajustarse según las necesidades del problema o la precisión requerida.

Ventajas para la comparación de arrays en NumPy

Estas funciones no solo son prácticas para evitar errores en comparaciones numéricas, sino que también mejoran la legibilidad del código y hacen que las comparaciones sean más confiables en cálculos sensibles a la precisión.

Publicidad


Ejemplos prácticos

A continuación, se muestra una serie de ejemplos donde se puede ver la utilidad de estas funciones en el trabajo diario.

Comparar dos valores con np.isclose()

Supongamos que se tiene dos valores que deberían ser iguales pero debido a errores numéricos presentan mínimas diferencias. Por ejemplo, como se muestra en el siguiente código, 0.3 y 0.1 + 0.2 no son iguales:

import numpy as np  

a = 0.3  
b = 0.1 + 0.2  

# Comparación directa  
print(a == b)

# Comparación con np.isclose  
print(np.isclose(a, b))  

# Comprobación de que la suma no es cero
print(a - b)
False
True
-5.551115123125783e-17

La comparación directa da como resultado False, pero la función np.isclose() devuelve True, el valor esperado. Esto es así porque, como se ve en el código, existe una pequeña diferencia entre ambos valores.

Publicidad


Comparar arrays elemento a elemento

Otra forma de entender cómo funciona np.isclose() es comparando dos arrays donde las discrepancias entre los valores varían. Lo que se muestra en el siguiente ejemplo:

array1 = np.array([1.0, 2.0001, 3.000001])  
array2 = np.array([1.0, 2.0, 3.0])  

# Comparación con np.isclose  
resultado = np.isclose(array1, array2)  
print(resultado)

[ True False True]

En este caso, el resultado muestra que el primer y el tercer elementos están suficientemente ”cerca” dentro de la tolerancia predeterminada, pero el segundo elemento no.

¿Por qué ocurre esto?

  • Primera posición: 1.0 y 1.0 son idénticos, por lo que cumplen la tolerancia.
  • Segunda posición: La diferencia entre 2.0001 y 2.0 es demasiado grande para la tolerancia relativa predeterminada de 1e-5, lo que da como resultado False.
  • Tercera posición: Aunque 3.000001 y 3.0 no son exactamente iguales, la discrepancia es menor que la tolerancia relativa, por lo que devuelve True.

Verificar arrays completos con np.allclose()

Si lo que se desea es comprobar si todos los elementos de dos arrays están los suficientemente cerca, pero no se desea comparar todos, se puede usar la función np.allclose(). Como se muestra en el siguiente ejemplo:

# Verificar si todos los elementos son cercanos  
if np.allclose(array1, array2):  
    print("Los arrays son similares dentro de la tolerancia.")  
else:  
    print("Los arrays no son similares.")  
Los arrays no son similares.

Publicidad


Ajustar la tolerancia en la comparación de arrays en NumPy

En ciertos casos, los valores predeterminados de tolerancia pueden no ser adecuados, tanto por ser poco exigentes como demasiado exigentes. Por lo que se pueden ajustar mediante los parámetros rtol y atol:

resultado = np.isclose(array1, array2, rtol=1e-4, atol=1e-5)  
print(resultado) 
[ True  True  True]

Por lo que, al reducir la tolerancia, los tres valores del array se encuentran dentro del margen de error.

Conclusiones

La comparación de arrays en NumPy con tolerancias es una técnica imprescindible al trabajar con datos numéricos. Funciones como np.isclose() y np.allclose() ofrecen una solución eficiente y flexible para manejar las imprecisiones inherentes al cálculo en punto flotante.

Con estas herramientas, se pueden validar los resultados, garantizar la consistencia de los análisis y evitar errores derivados de diferencias mínimas en los datos.

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • ¡Nuevo video! Aprende a seleccionar datos en Pandas con .iloc y .loc
  • ¡Nuevo video! Aprende a eliminar filas y columnas en Pandas sin errores
  • Nuevo video en el canal: Cómo eliminar duplicados de una lista en Python
  • Nuevo video en YouTube: Trabajando con archivos JSON en Python
  • Nuevo video: Leer y guardar archivos Excel y CSV en Python
  • Nuevo video: cómo activar copiar y pegar en VirtualBox fácilmente
  • Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM
  • Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey
  • Cómo calcular el tamaño de la muestra para encuestas

Publicado en: Python Etiquetado como: NumPy

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Cómo calcular el tamaño de la muestra para encuestas

septiembre 9, 2025 Por Daniel Rodríguez

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

septiembre 4, 2025 Por Daniel Rodríguez

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

septiembre 2, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Cómo desinstalar Oracle Database 19c en Windows publicado el noviembre 25, 2022 | en Herramientas
  • NumPy NumPy: Concatenar matrices en NumPy con np.concatenate() publicado el agosto 17, 2021 | en Python
  • pandas Pandas: Contar los valores nulos en DataFrame publicado el agosto 12, 2021 | en Python
  • Creación de documentos Word con Python publicado el septiembre 7, 2020 | en Python
  • Correlación y causalidad: no es lo mismo publicado el junio 13, 2025 | en Ciencia de datos

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes
  • Javier en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto