Qual è il (o la maggior parte "Pythonic") modo più veloce per convertirePython/Numpy: Convertire elenco di Caccio a unsigned int
x = [False, False, True, True]
in
12
? (Se c'è un modo.)E se di bool fosse invece ? C'è un comando speciale per questo?
Ho un grande array m-by-n di booleani, in cui ogni riga n-elemento rappresenta un singolo hash dimensionale ridotto di un vettore di caratteristiche altamente dimensionale. (Nell'esempio sopra, n = 4.) Vorrei conoscere la risposta per comprimere i miei dati il più possibile. Grazie.
Edit: Grazie per le risposte! Utilizzando il seguente codice di prova,
t = 0
for iter in range(500):
B = scipy.signbit(scipy.randn(1000,20))
for b in B:
t0 = time.clock()
# test code here
t1 = time.clock()
t += (t1-t0)
print t
... ecco erano i tempi di esecuzione sul mio computer portatile Thinkpad:
- My answer: 4.26 sec
- Sven Marnach 1: 7.88
- Emil H: 8.51
- Sven Marnach 2: 8,72
- delnan: 10,14
- liori: 53,49
Naturalmente, accolgo con favore eventuali test indipendenti che possono confermare o smentire i miei dati!
Edit: Nella mia risposta qui sotto, cambiando int(j)
semplicemente j
funziona ancora, ma corre sei volte più lento! Allora forse le altre risposte diventerebbero più veloci se la bool fosse lanciata usando int
. Ma sono troppo pigro per testare di nuovo tutto.
Edit: Liori ha registrato risultati di test indipendenti here.
Qual è la regola per convertire [False, False, True, True] in 12? –
'x [0]' è l'LSB e 'x [-1]' è l'MSB. –
Si prega di utilizzare 'timeit' per i test, è molto meno soggetto a errori. I miei tempi: http://pastebin.com/x1FEP9gY – liori