• 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
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

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

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.

La caverna del consumo, o cómo Greenspan miraba calzoncillos para hacer política monetaria – El bestiario de los indicadores económicos absurdos (parte 1)
En Analytics Lane
La caverna del consumo, o cómo Greenspan miraba calzoncillos para hacer política monetaria – El bestiario de los indicadores económicos absurdos (parte 1)

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.

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.

Publicidad


¿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.

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.

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.

Publicidad


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.

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

  • La caverna del consumo, o cómo Greenspan miraba calzoncillos para hacer política monetaria – El bestiario de los indicadores económicos absurdos (parte 1)
  • Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring
  • Subplots en Matplotlib: cómo organizar múltiples gráficos en una sola figura
  • Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales
  • Ley de Benford: cómo detectar datos manipulados con ejemplos reales
  • Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar
  • Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos
  • WOE e IV: La Base Matemática del Credit Scoring
  • De la Regresión Logística al Scorecard: La Transformación Matemática

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

La caverna del consumo, o cómo Greenspan miraba calzoncillos para hacer política monetaria – El bestiario de los indicadores económicos absurdos (parte 1)

junio 4, 2026 Por Daniel Rodríguez

Calibración vs Discriminación en Credit Scoring: diferencias clave y cómo evaluarlas

junio 2, 2026 Por Daniel Rodríguez

Ley de Benford: cómo detectar datos manipulados con ejemplos reales

mayo 28, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Codificación JSON Archivos JSON con Python: lectura y escritura publicado el julio 16, 2018 | en Python
  • pandas Eliminar las filas con valores nulos en Pandas publicado el abril 24, 2023 | en Python
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python) publicado el octubre 7, 2025 | en Herramientas, Productividad
  • Comparar archivos en Visual Studio Code publicado el enero 10, 2024 | en Herramientas
  • Filter, map y reduce en un diccionario de Python publicado el enero 20, 2020 | en Python

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.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria

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-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto