Python: ¿Cómo evitar el RuntimeWarning numpy en la definición de la función?

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?

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

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.

Para solucionar esto, puede boost 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.