[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