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

Adrian Roldan roldanadrian en gmail.com
Vie Mayo 18 15:35:14 ART 2012


El 18 de mayo de 2012 13:26, Matías Bellone <matiasbellone en gmail.com>escribió:

> 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
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>


Gracias gente por orientarme. Espero sea correcto lo que hice, porque por
ahora funcionó.
Numpy "eleva" una excepción que es atrapada por el try exterior pero ahora
ya no es un error ZeroDivisionError sino que es FloatingPointError.

 try:

np.seterr(divide='raise')

kt = np.divide(linea[17], linea[6])

except FloatingPointError:

kt = -8000

Todavía tengo que digerir del todo el manejo de numpy.
Gracias nuevamente por la mano.

Saludos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120518/1a4e77e3/attachment.html>


More information about the pyar mailing list