Quantcast
Channel: Python Hispano
Viewing all articles
Browse latest Browse all 180

Pybonacci: ¿Cómo trabajar con arrays de binarios en Python?

$
0
0

Esta semana vamos con una pregunta de Gonzalo, que nos dice por email:

Saludos. Últimamente he estado trabajado en python y me gusta mucho. En estos momentos estoy haciendo un algoritmo genético con codificación en numeros binarios utilizando bitset de C++. ¿Tendran información acerca de como trabajar con cadenas de binarios en python? Gracias y Felicidades por el blog.

He investigado un poco acerca de bitset en la referencia de C++, y leo que se trata básicamente de un array de valores booleanos, optimizados para su almacenamiento en memoria.

Esto es exactamente lo que puedes conseguir con los arrays de NumPy: son contenedores de datos homogéneos, que se almacenan eficientemente en memoria e implementados en C para que su manejo sea mucho más rápido. En nuestro blog tienes muchos artículos sobre NumPy, como por ejemplo este tutorial sobre los distintos métodos para crear arrays:

http://pybonacci.wordpress.com/2012/06/11/como-crear-matrices-en-python-con-numpy/

Para que los arrays funcionen como bitset, tienen que tener el dtype bool. Puedes conseguir esto de varias maneras:

  • Creando el array a partir de una lista de valores True y False:
>>> np.array([True, False, True])
array([ True, False,  True], dtype=bool
  • Utilizando el argumento dtype=bool para hacer una conversión explícita:
>>> np.array([1, 0, -2.5], dtype=bool)
array([ True, False,  True], dtype=bool)
  • Utilizando el método astype:
>>> np.arange(-3, 3).astype(bool)
array([ True,  True,  True, False,  True,  True], dtype=bool)
  • Utilizando las funciones lógicas de NumPy:
>>> np.arange(-3, 3) < 0
array([ True,  True,  True, False, False, False], dtype=bool)
>>> np.isinf(np.arange(-2, 2) / 0)
array([ True,  True, False,  True], dtype=bool)

(Puedes consultar un listado en http://docs.scipy.org/doc/numpy/reference/routines.logic.html)

A partir de ahí, tienes todas las funciones de NumPy y toda la potencia de Python a tu disposición.

¡Y hasta aquí la pregunta de la semana! :)Y tú, ¿has trabajado con arrays booleanos en NumPy? ¿Crees que hay algo que otros lenguajes tienen y que a Python le falta en este sentido? O al contrario, ¿te has encontrado con que con NumPy tienes ventajas que de otra forma no tendrías?¡Cuéntanoslo en los comentarios!


Archivado en: Preguntas Tagged: arrays, bitset, numpy, python

Viewing all articles
Browse latest Browse all 180