2012-07-26 16 views
25

¿Cómo puedo declarar una matriz de bits de un tamaño muy grande, digamos 6 millones de bits?¿Cómo crear una matriz de bits en Python?

+13

¿Qué estás tratando de lograr? – ThiefMaster

+1

Esto podría usarse para algo así como un mapa de bits. – SJP

+0

Vea también http://stackoverflow.com/questions/2147848/how-do-i-represent-and-work-with-n-bit-vectors-in-python - indeciso para marcar como duplicado. – tripleee

Respuesta

30
from bitarray import bitarray 

a = bitarray(2**20) 

Puede ver más información sobre este módulo en http://pypi.python.org/pypi/bitarray/

+1

_bitarray_ no parece estar en el python estándar, sino que es una característica ofrecida por _pypy_. – zvezda

+0

Creo que quieres decir * pip * – Uxio

+7

Creo que te refieres a "incluido en * PyPI *", el índice de paquete de Python. : p – Gandaro

21

El módulo bitstring puede ayudar:

from bitstring import BitArray 
a = BitArray(6000000) 

Esto tomará menos de un megabyte de memoria, y es fácil de configurar , leer, cortar e interpretar bits. A diferencia del módulo bitarray, es puro Python, además funciona para Python 3.

Consulte the documentation para obtener más información.

5

Consigue el módulo BitArray usando

pip install bitarray 

A continuación, este código se creará una matriz de bits de tamaño de 6 millones de dólares,

from bitarray import bitarray 
bit_array = bitarray(6000000) 

Puede inicializar todos los bits a cero usando

bit_array.setall(0) 

Para configurar un bit en particular, digamos el número de bit 25, a 1, haga esto:

bit_array[25]=1 
+1

Actualicé 'pip' de antemano vea [link] (https://packaging.python.org/installing/) Luego ejecute' python -m pip install bitarray' en Windows. – yW0K5o

5

Este trazador convierte bytes a una lista de valores de bit True/False. Puede que no sea de rendimiento para bits de 6M, pero para banderas pequeñas debería estar bien y no necesita dependencias adicionales.

>>> flags = bytes.fromhex(b"beef") 
>>> bits = [flags[i//8] & 1 << i%8 != 0 for i in range(len(flags) * 8)] 
>>> print(bits) 
[False, True, True, True, True, True, False, True, True, True, True, True, False, True, True, True] 
Cuestiones relacionadas