Re: [Python-es] numpy.absolute
El 29 de diciembre de 2015, 23:24, Rolando Paz escribió: > Hola Yamila > > Muchas gracias por tu correo. > > Lo que necesito es corregir cualquier valor negativo que tenga ceros a la > izquierda. > > Algunos ejemplos: > > -1 > 00-355 > -54623 > 000-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: > > ['00' '00' '00' '00-4834129' '00' > '00' '00' '00'] > > 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 > 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 -> 0x / 0b / 000x01FB / 00507 -> 0x / 0b / 000x01FC / 00508 -> 0x / 0b / 000x01FD / 00509 -> 0xFFB63CAF / 0b1011011000001010 / 00-48341290x01FE / 00510 -> 0x / 0b / 000x01FF / 00511 -> 0x / 0b / 000x0200 / 00512 -> 0x / 0b / 00"""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'kk' en un string literal "b'kk'" ¿?¿?¿?* *## 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 strif '-' 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 ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] numpy.absolute
de entrada te digo que no conozco numpy ... pero en python casi todas las clases (bien hechas) tienen un metodo __str__ que permite visualizar el objeto como string, en tu casi ese metodo ha de existir ya que tu print arroja una representación el objeto. Seguro que hay formas muchisimas veces mas eficientes de obtener el "numero" de cada posición directamente para ello tienes que estudiarte la documentación. No obstante puedes hacer lo siguiente: si Y es tu objeto y.__str__() es la representación en string de tu objeto y.__str__()[.split(' ') es tu objeto convertido en lista de strings tomando el espacio como separador. y.__str__()[.split(' ')[3] es el cuarto objeto de la lista, que sería el '00-4834129' y.__str__()[.split(' ')[3].replace("'", "") como tiene ' las tenemos que borrar para que no tengamos problemas mas adelante y.__str__()[.split(' ')[3].lstrip['0'] quitamos los 0 a la izquierda y.__str__()[.split(' ')[3].lstrip['0'].replace('-') le quitamos el signo - si lo tiene int(y.__str__()[.split(' ')[3].lstrip['0'].replace('-')) por último tenemos el valor entero de la representación en string El 29 de diciembre de 2015, 22:24, Rolando Paz escribió: > Hola Yamila > > Muchas gracias por tu correo. > > Lo que necesito es corregir cualquier valor negativo que tenga ceros a la > izquierda. > > Algunos ejemplos: > > -1 > 00-355 > -54623 > 000-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: > > ['00' '00' '00' '00-4834129' '00' > '00' '00' '00'] > > 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 > y = float(str(y[0]).lstrip("0")) > ValueError: could not convert string to float: > > Seguire intentando... :-) > > > El 29 de diciembre de 2015, 13:05, Yamila Moreno Suárez < > yamila...@gmail.com> escribió: > >> 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 : >> >>> 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 50 >>> Traceback (most recent call last): >>> File "plot_bram.py", line 27, in >>> y = float(str(y).lstrip("0")) >>> ValueError: could not convert string to float: ['00' >>> '00' '00' '00-4834129' '00' >>> '00' '00' '00'] >>> >>> Entiendo que este es el contenido del arreglo "y": >>> >>> ['00' '00' '00' '00-4834129' '00' >>> '00' '00' '00'] >>> >>> Esta representación esta correcta? >>> >>> >>> >>> >>> >>> El 29 de diciembre de 2015, 12:37, Yamila Moreno Suárez < >>> yamila...@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)
Re: [Python-es] numpy.absolute
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='>> a[:2] = np.char.lstrip(a[:2], '0') >>> a array(['-20', '-3', '000'], dtype=': 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 y = float(str(y).lstrip("0"))ValueError: could not convert string to float: ['00' '00' '00' '00-4834129' '00' '00' '00' '00'] Entiendo que este es el contenido del arreglo "y": ['00' '00' '00' '00-4834129' '00' '00' '00' '00'] Esta representación esta correcta? El 29 de diciembre de 2015, 12:37, Yamila Moreno Suárez 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 : 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 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 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@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@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@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@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@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] numpy.absolute
Rolando, Puedes probar con lo siguiente: y = np.array([float(y[k].split("-")[-1]) for k in range(len(y))]) Y lo mismo con el array "x"... En este caso, no necesitarás utilizar np.absolute porque el método split "elimina" el signo negativo. Saludos. El 29 de diciembre de 2015, 16:24, Rolando Paz escribió: > Hola Yamila > > Muchas gracias por tu correo. > > Lo que necesito es corregir cualquier valor negativo que tenga ceros a la > izquierda. > > Algunos ejemplos: > > -1 > 00-355 > -54623 > 000-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: > > ['00' '00' '00' '00-4834129' '00' > '00' '00' '00'] > > 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 > y = float(str(y[0]).lstrip("0")) > ValueError: could not convert string to float: > > Seguire intentando... :-) > > > El 29 de diciembre de 2015, 13:05, Yamila Moreno Suárez < > yamila...@gmail.com> escribió: > >> 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 : >> >>> 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 50 >>> Traceback (most recent call last): >>> File "plot_bram.py", line 27, in >>> y = float(str(y).lstrip("0")) >>> ValueError: could not convert string to float: ['00' >>> '00' '00' '00-4834129' '00' >>> '00' '00' '00'] >>> >>> Entiendo que este es el contenido del arreglo "y": >>> >>> ['00' '00' '00' '00-4834129' '00' >>> '00' '00' '00'] >>> >>> Esta representación esta correcta? >>> >>> >>> >>> >>> >>> El 29 de diciembre de 2015, 12:37, Yamila Moreno Suárez < >>> yamila...@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 : > Mira lo que surge: > > $ python plot_bram.py -b bram_ac_real -f 50 > Traceback (most recent call last): > File "plot_bram.py", line 27, in > 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 > escribió: > >> On 2015-12-29 18:20, Rolando Paz wrote: >> >> Lo que entiendo que necesito es encontrar una función que eli
[Python-es] Answer Machine Detection Python
Hola comunidad. Tengo un requerimiento que consiste en detectar cuando un llamado originado desde una PBX; ejemplo Asterisk; es contestado por un humano o por una maquina.En Asterisk existe un desarrollo AMD (Answer Machine Detection) pero esta abandonado desde hace bastante rato.Mi idea es poder realizar algo al respecto en Python; he googleado he encontrado info usando redes neuronales; me parece genial; es decir que la red vaya aprendiendo cuando contesta una maquina, no se si este un poco sobredimensionado para lo que yo necesito; además que no tengo experiencia en redes neuronales. La verdad es que nunca he usado Python desde un punto de vista científico ya sea usando numpy o scipy, pero me imagino que lo pretendo hacer va por ese lado. Mi consulta es si alguno de ustedes conoce algo sobre el tema o si bien existe algún desarrollo o libreria en python que me ayude en tal sentido. Quedo atento a sus comentarios.Aprovecho de desearles a todos una felices fiestas de fin de año. Saludos ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/