Estoy tratando de crear una 'máscara' de numpy.array especificando ciertos criterios. Python tiene incluso agradable sintaxis para algo como esto:Numpy.array indexing question
>> A = numpy.array([1,2,3,4,5])
>> A > 3
array([False, False, False, True, True])
Pero si tengo una lista de criterios en lugar de un rango:
>> A = numpy.array([1,2,3,4,5])
>> crit = [1,3,5]
que no puede hacer esto:
>> A in crit
Tengo que hacer algo basado en la lista de comprensiones, como esta:
>> [a in crit for a in A]
array([True, False, True, False, True])
Cuál es correcto.
Ahora, el problema es que estoy trabajando con grandes matrices y el código anterior es muy lento. ¿Hay una forma más natural de hacer esta operación que pueda acelerarla?
EDIT: Pude obtener una pequeña aceleración haciendo crit en un conjunto.
Edit2: Para aquellos que estén interesados:
enfoque de Jouni: 1000 bucles, lo mejor de 3: 102 mu s por bucle
numpy.in1d: 1.000 bucles, mejor de 3 : 1,33 ms por bucle
Edit3: Apenas probadas de nuevo con B = randint (10, tamaño = 100)
enfoque de Jouni: 1.000 bucles, lo mejor de 3: 2,96 ms por bucle
numpy.in1d: 1.000 bucles, lo mejor de 3: 1,34 ms por cada bucle
Conclusión: Uso numpy. in1d() a menos que B sea muy pequeño.
parece una adición reciente a numpy (no estaba en la versión 1.3) – Paul
Tiene razón. Solo probé en B con una longitud de 3. Si B también es grande, numpy.in1d () definitivamente escala mucho mejor. – aduric
@aduric y mi segundo método es incluso más rápido que in1d. –