[pyar] No consigo manejar excepción en matriz de numpy

Matías Bellone matiasbellone en gmail.com
Vie Mayo 18 13:26:21 ART 2012


2012/5/18 Adrian Roldan <roldanadrian en gmail.com>:
> Hola gente, tengo al menos, un problema. No me doy cuenta como manejar una
> excepción del tipo división por cero.
>
> Les muestro una parte del código:
>
> matriz = np.hstack((matrizdatos1, matrizdatos2))
> for linea in matriz:
>     try:
>         kt = linea[17] / linea[6]
>     except ZeroDivisionError:
>         kt = -8000
>
>     print  kt
>
> armo una matriz de numpy con datos que tengo en dos archivos, la recorro y
> hago la división. Cuando encuentra un cero en linea[6]
> me devuelve inf en lugar de asignar -8000. ¿Será que así no se manejan las
> excepciones en numpy, que estoy haciendo algo mal, o que ya estoy loco?
>
> No quiero hacer lo siguiente, que sí funciona:
>
> for linea in matriz:
>
> if linea[6] == 0:
>
> kt = -8000
>
>
>
> Aparte de no hacer lo que yo quisiera que haga me da la siguiente
> advertencia:
>
> ktprovisorio.py:15: RuntimeWarning: divide by zero encountered in
> double_scalars
>   kt = linea[17] / linea[6]
> ktprovisorio.py:15: RuntimeWarning: invalid value encountered in
> double_scalars
>   kt = linea[17] / linea[6]
>
>
> La búsqueda en la red del error no me aclaró nada.

Aparentemente, lo que hace numpy con algunas operaciones inválidas es
configurable[1].

[1] http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html#numpy.seterr

Lo que tendrías que hacer es configurar numpy para que genere una
excepción al momento de dividir por cero. Es decir, según la
documentación,

oldsettings = numpy.seterr(divide = 'raise')
<acá hacé tus operaciones>
numpy.seterr(**oldsettings) # para devolver la configuración a como estaba antes

Saludos,
Toote
-- 
Web: http://www.enespanol.com.ar



More information about the pyar mailing list