¿Cuál es la manera más rápida (o más "Pythonic") para convertirPython/Numpy: Convertir la lista de Bools a unsigned int
x = [False, False, True, True]
en
12
? (Si existe tal forma)¿Qué pasaría si
x
fuera unnumpy.array
de bools? ¿Hay un comando especial para eso?
I tienen una gran variedad m-por-n de booleanos, donde cada fila de n elementos representa una sola de hash de pocas dimensiones de un vector de alta dimensión característica. (En el ejemplo anterior, n = 4.) Me gustaría saber la respuesta para comprimir mis datos tanto como sea posible. Gracias.
Edición: Gracias por las respuestas! Usando el siguiente código de prueba,
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
... aquí eran los tiempos de ejecución en mi portátil Thinkpad:
- My answer: 4.26 seg
- Sven Marnach 1: 7,88
- Emil H: 8,51
- Sven Marnach 2: 8.72
- delnan: 10.14
- liori: 53,49
Por supuesto, la bienvenida a cualquier pruebas independientes que pueden confirmar o refutar mis datos!
Edición: En mi respuesta a continuación, cambiando simplemente int(j)
j
todavía funciona, pero funciona seis veces más lento! Entonces, tal vez las otras respuestas serían más rápidas si el bool se lanzara usando int
. Pero soy demasiado vago para probar todo de nuevo.
Edición: Liori publicado resultados de pruebas independientes here.
¿Cuál es la regla para convertir [False, False, True, True] en 12? –
'x [0]' es el LSB, y 'x [-1]' es el MSB. –
Por favor use 'timeit' para probar, es mucho menos propenso a errores. Mis tiempos: http://pastebin.com/x1FEP9gY – liori