librerias - Python: ¿Cómo evitar el RuntimeWarning numpy en la definición de la función?
spline cuadratico python (3)
Para solucionar esto, puede aumentar la precisión modificando el tipo de los elementos de la matriz en los que llama a su función.
Por ejemplo, si la matriz multiplicadora a con números grandes como elementos por un número de punto flotante grande genera una excepción
RuntimeWarning: overflow encountered in multiply
luego al especificar lo siguiente
a = np.array(a, dtype=np.float128)
no se produce ninguna advertencia.
Diseñé una función simple para devolver una función matemática que se puede usar para ajustar datos experimentales. Las funciones se parecen mucho a las siguientes:
def colecole_2(f,*p):
term1=p[0] * ( 1 - 1 / (1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[1], p[2])))
term2=p[3] * ( 1 - 1 / (1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[4], p[5])))
return p[6]*(1-abs( term1+ term2))
Desafortunadamente me encuentro con problemas con RunTimeWarnings como:
RuntimeWarning: overflow encountered in power
RuntimeWarning: overflow encountered in divide
Debido a los valores que son demasiado grandes o pequeños. Aunque no soy capaz de resolver este problema por mi cuenta. ¿Hay alguna forma de redefinir mi función para que pase sin advertencias?
Puede usar numpy.errstate que es un administrador de contexto incorporado. Esto le permitirá configurar el manejo de errores para que esté dentro del contexto de la instrucción with.
import numpy
# warning is not logged here. Perfect for clean unit test output
with numpy.errstate(divide=''ignore''):
numpy.float64(1.0) / 0.0
Tuve que hacer esto recientemente al escribir pruebas unitarias para algún código Python heredado.
Use numpy.seterr
para controlar lo que hace numpy en esta circunstancia: http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html
Utilice el módulo de advertencias para controlar cómo se presentan o no las advertencias: http://docs.python.org/library/warnings.html