[Python-es] numpy.absolute

Álvaro Glez. alzacon21 en hotmail.com
Mar Dic 29 15:19:27 EST 2015


Puedes aplicar np.char.lstrip  directamente a la fila/s   y/o   columa/s   donde tienes el problema

http://docs.scipy.org/doc/numpy-1.7.0/reference/generated/numpy.core.defchararray.lstrip.html#numpy.core.defchararray.lstrip

y después cambiar el tipo del array

Un ejemplo:

>>> a = np.array(['00-20', '00-3','000'])
>>> a
array(['00-20', '00-3', '000'], 
      dtype='<U5')
>>> a[:2] = np.char.lstrip(a[:2], '0')
>>> a
array(['-20', '-3', '000'], 
      dtype='<U5')

Si lo aplicas a todo el array ,además, pasas de tener "000" a "" y no creo que sea lo que quieres.

Un saludo


PD: Di con ello porque me parecia extraño que no hubiese nada de eso en numpy y hubo suerte así era.




From: yamila.ms en gmail.com
Date: Tue, 29 Dec 2015 20:05:17 +0100
To: python-es en python.org
Subject: Re: [Python-es] numpy.absolute

Rolando, un par de cositas:

Si y tiene el valor que nos pasas, entonces tu código tiene que ser algo como:

y = float(str(y[0]).lstrip("0"))
¡ojo! en lstrip la "l" significa "left", así que solo te quita los ceros de la izquierda. ¿así te sirve?

Por otro lado, te doy un par de pistas para que tú mismo hagas debugging del programa:

1) usa print, sí tal cual. Añade en tu programa líneas con:

print(" VALOR DE Y ANTES DE TAL O CUAL TRANSFORMACION ", y)

2) usa pdb. Si en cualquier línea de tu programa pones "import pdb; pdb.set_trace()", al lanzar la ejecución se parará en ese punto, y te dará un intérprete de python con las variables de tu programa, de forma que puedes investigar qué valor tiene en un punto concreto.

El problema que estás teniendo tiene mucho de "afinar" el resultado como te guste, o como lo necesites según el caso, y para eso, es muy recomendable que estés constantemente evaluando qué valores tienen las variables y probando las transformaciones que necesites.

¡¡mucho ánimo!!
yami



2015-12-29 19:47 GMT+01:00 Rolando Paz <flxpaz en gmail.com>:
Gracias por todos los consejos.
Hice esto:
cols = np.loadtxt(args.bram, dtype=str, usecols=[2,8])
x = cols[:,0]y = cols[:,1]
max_x = np.argmax(y)
y = float(str(y).lstrip("0"))
plt.plot(x,y)
plt.show()
El nuevo error es este:
$ python plot_bram.py -b bram_ac_real_test -f 50Traceback (most recent call last):  File "plot_bram.py", line 27, in <module>    y = float(str(y).lstrip("0"))ValueError: could not convert string to float: ['0000000000' '0000000000' '0000000000' '00-4834129' '0000000000' '0000000000' '0000000000' '0000000000']
Entiendo que este es el contenido del arreglo "y":
['0000000000' '0000000000' '0000000000' '00-4834129' '0000000000' '0000000000' '0000000000' '0000000000']
Esta representación esta correcta?




El 29 de diciembre de 2015, 12:37, Yamila Moreno Suárez <yamila.ms en gmail.com> escribió:
Rolando, el error te indica que tienes un tipo "ndarray" y que los ndarray no tienen "lstrip". 

lstrip es un método de strings (cadenas de texto), como la que ves en el ejemplo que te dio Juanlu.

Siguiendo con los consejos que te han dado en correos anteriores, lo que tendrías que hacer es (1)pasar el valor de tu ndarray (que si no me equivoco es 00-48....) a string, (2)aplicarle la modificación y (3)después volver a pasarlo al tipo que necesites. 

en varios pasos:
y = str(y)
y = y.lstrip("0")
y = float(y)

en un solo paso:
y = float(str(y).lstrip("0"))

suerte :)



2015-12-29 19:20 GMT+01:00 Rolando Paz <flxpaz en gmail.com>:
Mira lo que surge:
$ python plot_bram.py -b bram_ac_real -f 50Traceback (most recent call last):  File "plot_bram.py", line 27, in <module>    y = y.lstrip("0")AttributeError: 'numpy.ndarray' object has no attribute 'lstrip'
Codigo:
cols = np.loadtxt(args.bram, dtype=str, usecols=[2,8])
x = cols[:,0]y = cols[:,1]
max_x = np.argmax(y)
y = y.lstrip("0")
plt.plot(x,y)
plt.show()




El 29 de diciembre de 2015, 12:10, Juan Luis Cano <juanlu001 en gmail.com> escribió:

  
    
  
  
    On 2015-12-29 18:20, Rolando Paz wrote:

    
    Lo que entiendo que
        necesito es encontrar una función que elimine todos los ceros a
        la izquierda del signo menos.
    

    Tal vez puedes probar con

    

    >>> "00-4834129".lstrip("0")

    '-4834129'

    

    https://docs.python.org/3/library/stdtypes.html#str.lstrip

    

    Juan Luis

  


_______________________________________________

Python-es mailing list

Python-es en python.org

https://mail.python.org/mailman/listinfo/python-es

FAQ: http://python-es-faq.wikidot.com/





_______________________________________________

Python-es mailing list

Python-es en python.org

https://mail.python.org/mailman/listinfo/python-es

FAQ: http://python-es-faq.wikidot.com/




-- 
Yamila  Moreno Suárez
http://dendarii.eshttp://moduslaborandi.net


_______________________________________________

Python-es mailing list

Python-es en python.org

https://mail.python.org/mailman/listinfo/python-es

FAQ: http://python-es-faq.wikidot.com/





_______________________________________________

Python-es mailing list

Python-es en python.org

https://mail.python.org/mailman/listinfo/python-es

FAQ: http://python-es-faq.wikidot.com/




-- 
Yamila  Moreno Suárez
http://dendarii.eshttp://moduslaborandi.net


_______________________________________________
Python-es mailing list
Python-es en python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/ 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20151229/77079fcb/attachment.html>


Más información sobre la lista de distribución Python-es