[Python-es] numpy.absolute
Kiko
kikocorreoso en gmail.com
Mie Dic 30 04:34:56 EST 2015
El 29 de diciembre de 2015, 23:24, Rolando Paz <flxpaz en gmail.com> escribió:
> Hola Yamila
>
> Muchas gracias por tu correo.
>
> Lo que necesito es corregir cualquier valor negativo que tenga ceros a la
> izquierda.
>
> Algunos ejemplos:
>
> 00000000-1
> 000000-355
> 0000-54623
> 0000000-56
> 0-98756874
>
> El valor negativo depende de la potencia en dBm de la senial analógica que
> le ingrese a la tarjeta que estoy usando.
>
> Al colocar el print para observar el contenido de "y", observo esto:
>
> ['0000000000' '0000000000' '0000000000' '00-4834129' '0000000000'
> '0000000000' '0000000000' '0000000000']
>
> Veo cadenas separadas por un espacio en blanco.
>
> cols = np.loadtxt(args.bram, dtype=str, usecols=[2,8])
>
> x = cols[:,0]
> y = cols[:,1]
>
> print 'este es el contenido de y =',y
>
> y = float(str(y[0]).lstrip("0"))
>
> El error que surge es este:
>
> Traceback (most recent call last):
> File "plot_bram.py", line 28, in <module>
> y = float(str(y[0]).lstrip("0"))
> ValueError: could not convert string to float:
>
> Seguire intentando... :-)
>
>
>
Hola, Rolando.
Entiendo que estás trabajando en Python3.
np.loadtxt produce un error que no está resuelto desde hace mucho tiempo
(ver [1] y [2], por ejemplo). Parece que se resolverá en numpy 1.11
incluyendo un keyword encoding [3].
Este error lleva a muchos problemas al leer ficheros de strings con
np.loadtxt (sobretodo en python3 y numpy).
Por otro lado, estás intentando aplicar métodos de str a numpy arrays. Esto
no es posible y te devuelve los errores que estás viendo.
A continuación dejo un código comentado que debería funcionar:
*############################################ Importamos
librerías##########################################import ioimport numpy as
npimport matplotlib.pyplot as
plt################################################################################################################################
Todo esto es para simular un
fichero##########################################raw_data = """0x01FA /
00506 -> 0x00000000 / 0b00000000000000000000000000000000 / 00000000000x01FB
/ 00507 -> 0x00000000 / 0b00000000000000000000000000000000 /
00000000000x01FC / 00508 -> 0x00000000 / 0b00000000000000000000000000000000
/ 00000000000x01FD / 00509 -> 0xFFB63CAF /
0b11111111101101100011110010101111 / 00-48341290x01FE / 00510 -> 0x00000000
/ 0b00000000000000000000000000000000 / 00000000000x01FF / 00511 ->
0x00000000 / 0b00000000000000000000000000000000 / 00000000000x0200 / 00512
-> 0x00000000 / 0b00000000000000000000000000000000 / 0000000000"""file_sim
=
io.StringIO(raw_data)################################################################################################################################
Leemos los datos, fíjate en el dtype## Si usamos 'dtype = str' se rompe
todo y ## nos convierte el string regular de python3 b'kkkkkk' en un string
literal "b'kkkkkk'" ¿?¿?¿?*
*## para tu caso debes cambiar file_sim por la ruta a tu fichero.*
*##########################################cols = np.loadtxt(file_sim,
dtype = bytes, usecols = [2,
8])################################################################################################################################
Asignamos x e y,## Ahora, x e y son numpy arrays de una dimensión con
elementos como bytes,## un numpy array no tiene el método split u otros
típicos de strings,## Para poder transformar los bytes dentro del array a
un integer, por ejemplo, *
*## primero hemos de decodificar el byte a str y sobre el str aplicar el
método lstrip*
*## habría que iterar sobre los elementos del array, *
*## Hago un bucle forr para que se entienda lo que hace, se podría hacer en
una sola línea,*
*## cada elemento del array sí que tiene el método split ya que AHORA son
strings##########################################x = cols[:,0].astype(int)y
= cols[:,1]y_modificado = np.empty_like(y)for i, elem in enumerate(y):
elem = elem.decode() # pasamos de byte a str if '-' in elem:
y_modificado[i] = elem.lstrip('0') else: y_modificado[i] =
elemy_modificado =
y_modificado.astype(float)####################################################################################plt.plot(x,y_modificado)plt.show()*
Si no se entiende algo a o te falla seguirmos iterando.
[1] https://github.com/numpy/numpy/issues/2715
[2] https://github.com/numpy/numpy/issues/4600
[3] https://github.com/numpy/numpy/pull/4208
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20151230/a2cc81cb/attachment.html>
Más información sobre la lista de distribución Python-es