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,49

Obviamente, 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.

questionAnswers(10)

yourAnswerToTheQuestion