2012-07-26 25 views
25

Come posso dichiarare un array di bit di dimensioni molto grandi, ad esempio 6 milioni di bit?Come creare una matrice di bit in Python?

+13

Cosa stai cercando di ottenere? – ThiefMaster

+1

Questo potrebbe essere usato per qualcosa come una bitmap. – SJP

+0

Vedere anche http://stackoverflow.com/questions/2147848/how-do-i-represent-and-work-with-n-bit-vectors-in-python - esitante da contrassegnare come duplicato. – tripleee

risposta

30
from bitarray import bitarray 

a = bitarray(2**20) 

È possibile controllare di più informazioni su questo modulo alla http://pypi.python.org/pypi/bitarray/

+1

_bitarray_ non sembra essere nel python standard, ma è invece una funzionalità offerta da _pypy_. – zvezda

+0

Penso che intendiate * pip * – Uxio

+7

Penso che intendiate "incluso in * PyPI *", l'indice del pacchetto Python. : p – Gandaro

21

Il modulo bitstring può aiutare:

from bitstring import BitArray 
a = BitArray(6000000) 

questo richiederà meno di un megabyte di memoria, ed è facile da impostare , leggere, tagliare e interpretare i bit. A differenza del modulo bitarray è puro Python, in più funziona per Python 3.

Vedere the documentation per ulteriori dettagli.

5

scaricare il modulo del BitArray utilizzando

pip install bitarray 

Quindi, questo codice creerà una matrice di bit di dimensioni 6 milioni,

from bitarray import bitarray 
bit_array = bitarray(6000000) 

È possibile inizializzare tutti i bit a zero usando

bit_array.setall(0) 

Per impostare un bit particolare, ad esempio bit numero 25, su 1, procedere come segue:

bit_array[25]=1 
+1

Ho aggiornato 'pip' prima di vedere [collegamento] (https://packaging.python.org/installing/) Quindi eseguire' python -m pip install bitarray' su Windows. – yW0K5o

5

Questo one-liner converte i byte in un elenco di valori di bit True/False. Potrebbe non essere performante per i bit 6M ma per i piccoli flag dovrebbe andare bene e non ha bisogno di ulteriori dipendenze.

>>> 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] 
Problemi correlati