Cómo solucionarlo: RuntimeWarning: se encontró un desbordamiento en exp

En este artículo, discutiremos cómo corregir RuntimeWarning: desbordamiento encontrado en exp en Python.

Esta advertencia ocurre al usar la función exp() de la biblioteca NumPy al usar un valor que es demasiado grande. Esta función se usa para calcular el exponencial de todos los elementos en la array de entrada o un elemento (0-D Array of NumPy).

Ejemplo : código para representar una advertencia

Python3

import numpy as np
  
print(np.exp(789))

Producción:

La salida es infinita porque e^789 es un valor muy grande 

Esta advertencia ocurre porque el tamaño máximo de datos que se puede usar en NumPy es float64 cuyo rango máximo es 1.7976931348623157e+308. Al tomar logaritmo su valor se convierte en 709.782. Para cualquier valor mayor que este, se genera la advertencia.

Discutamos formas de solucionar esto.

Método 1: Usar float128

El tipo de datos float64 se puede cambiar a float128.

Ejemplo: Programa para corregir la advertencia

Python3

import numpy as np
  
x = 789
x = np.float128(x)
print(np.exp(x))

Producción: 

 Usando float128

Para ndarray, puede usar el parámetro dtype del método de array.

Ejemplo: Programa para producir salida sin usar dtype

Python3

import numpy as np
  
cc = np.array([789, 0.34, -1234.1])
print(np.exp(cc))

Producción:

 sin usar dtype

Ejemplo: Advertencia fija usando dtype

Python3

import numpy as np
  
cc = np.array([789, 0.34, -1234.1], dtype=np.float128)
print(np.exp(cc))

Producción:

usando dtype

         

Método 2: usar advertencias de filtro() 

Los mensajes de advertencia generalmente se emiten en situaciones en las que es útil alertar al usuario de alguna condición en un programa, donde esa condición (normalmente) no garantiza generar una excepción y finalizar el programa. Para hacer frente a las advertencias, hay un módulo integrado llamado advertencia. Para leer más sobre las advertencias de Python, puede consultar este artículo

La función filterwarnings() se puede utilizar para controlar el comportamiento de las advertencias en sus programas. El filtro de advertencias controla si las advertencias se ignoran, se muestran o se convierten en errores (generando una excepción). Esto se puede hacer usando diferentes acciones:

  • «ignorar» para nunca imprimir advertencias coincidentes
  • «error» para convertir las advertencias coincidentes en excepciones
  • «una vez» para imprimir solo la primera aparición de advertencias coincidentes, independientemente de la ubicación

Sintaxis:

advertencias.filteradvertencias(acción, mensaje=”, categoría=Advertencia, módulo=”, lineno=0, añadir=Falso)

Ejemplo: Reparación de advertencia usando filterwarnings()

Python3

import numpy as np
import warnings
  
# suppress warnings
warnings.filterwarnings('ignore')
  
x = 789
x = np.float128(x)
print(np.exp(x))

Producción:

usando advertencias de filtro()

Publicación traducida automáticamente

Artículo escrito por sornodeepchandra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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