Python / Numpy: convierte la lista de bools a int sin firmar
¿Cuál es la forma más rápida (o más "pitónica") de convertir
x = [False, False, True, True]
dentro12
? (Si hay tal manera).
Y six
eran en cambio unnumpy.array
de bools? ¿Hay un comando especial para eso?
Tengo una gran matriz de booleanos m-por-n, donde cada fila de n elementos representa un hash único de baja dimensión de un vector de características de alta dimensión. (En el ejemplo anterior, n = 4.) Me gustaría saber la respuesta para comprimir mis datos tanto como sea posible. Gracias.
Editar: ¡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í estaban los tiempos de ejecución en mi laptop Thinkpad:
Mi respuesta: 4.26 segundosSven Marnach 1: 7.88Emil H: 8.51Sven Marnach 2: 8.72delnan: 10,14liori: 53,49¡Por supuesto, agradezco cualquier prueba independiente que pueda confirmar o refutar mis datos!
Editar: En mi respuesta a continuación, cambiandoint(j)
simplementej
Todavía funciona, ¡pero corre seis veces más lento! Entonces, tal vez las otras respuestas serían más rápidas si el bool se lanzara usandoint
. Pero soy demasiado vago para probar todo de nuevo.
Editar: liori publicó resultados de pruebas independientesaquí.