Python / Numpy: converte a lista de bools para int não assinado
Qual é a maneira mais rápida (ou mais "pitônica") de converter
x = [False, False, True, True]
para dentro12
? (Se houver esse caminho.)
E sex
foram em vez denumpy.array
de bolinhos? Existe um comando especial para isso?
Eu tenho uma grande matriz m-por-n de booleanos, onde cada linha de elemento n representa um único hash de baixa dimensão de um vetor de recurso de alta dimensão. (No exemplo acima, n = 4.) Gostaria de saber a resposta para compactar meus dados o máximo possível. Obrigado.
Editar: Obrigado pelas respostas! Usando o seguinte código de teste,
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
... aqui estavam os tempos de execução no meu laptop Thinkpad:
Minha resposta: 4,26 segSven Marnach 1: 7.88Emil H: 8,51Sven Marnach 2: 8,72delnan: 10.14liori: 53,49Obviamente, saúdo quaisquer testes independentes que possam confirmar ou refutar meus dados!
Editar: Na minha resposta abaixo, alterarint(j)
simplesmentej
ainda funciona, mas corre seis vezes mais devagar! Talvez as outras respostas se tornassem mais rápidas se o bool fosse lançado usandoint
. Mas estou com preguiça de testar tudo de novo.
Editar: liori postou resultados de testes independentesaqui.