Saturday, September 11, 2010

Los análogos a list.pop y .list.append en NumPy

La verdad venía buscando algo así hace rato, por que me gusta ocupar el comando readcol (léase cómo usar readcol en Python) que es súper simple de usar en Python para leer datos, pero que agraciadamente (y ya verán por que) nos entrega arrays estilo NUMPY, y no NUMARRAY. En Python (bueno, NUMARRAY), uno al crear un array llamado "lista", por ejemplo que tenía los elementos [0,1,2,3,4], uno podía hacer:
>>> lista.pop(4)
Y eso eliminaba el cuarto elemento de mi array. Pasaba lo mismo con:
lista.append(numero)
Donde uno agregaba el valor "numero" al último elemento del array. En Numpy, los análogos a esto son mucho más generales y poderosos. El análogo a pop vendría siendo el comando delete. Con Numpy importado, si tenemos la misma lista pero creada "al estilo Numpy", o sea:

>>> from numpy import *
>>> lista=array([0,1,2,3,4,5,6,7,8,9,10])
Para ocupar el comando delete, por ejemplo, para borrar el elemento 2, 3 y 4 de mi array hago:
>>> lista = delete(lista,[2,3,4])
Y al imprimir mi lista en la línea de comandos, me queda:
>>> print lista
[0 1 5 6 7 8 9 10]
Ya, ok, ok. Pero...¡append si que era útil! Pues bien, efectivamente existe el comando append en Numpy. Para hacer lo mismo a mi lista a la que le borré los elementos de más arriba, y agregrale al final los valores 0.001 y 0.005, hacemos:
>>> lista=append(lista,[0.001,0.005])
Y al ver mis valores, obtengo:
>>> print lista
[0e0 1e0 5e0 6e0 7e0 8e0 9e0 10e0 1e-3 5e-3]
¡No se asusten! Es lo mismo, solo que nos convirtió todos nuestros datos a float :). Pero...supongamos que tenemos dos listas, lista1 y lista2 y los queremos unir...¿cómo lo hacemos más eficientemente? Ocupamos el comando hstack:
>>> lista=hstack([lista1,lista2])
¡Y listo! Ah...¿cuál es la diferencia? Que aquí jugué con matrices de rango 1 (vectores n-dimensionales). Lo que puse más arriba tiene muchas mejores aplicaciones a matrices: ¡Jueguen!

No comments:

Post a Comment