Я пытаюсь создать «маску» numpy.array, указав определенные критерии. У Python даже есть хороший синтаксис для чего-то вроде этого:
>> A = numpy.array([1,2,3,4,5])
>> A > 3
array([False, False, False, True, True])
Но если вместо этого у меня есть список критериев диапазона:
>> A = numpy.array([1,2,3,4,5])
>> crit = [1,3,5]
Я не могу этого сделать:
>> A in crit
Мне нужно сделать что-то на основе понимания списка, например:
>> [a in crit for a in A]
array([True, False, True, False, True])
Что правильно.
Проблема в том, что я работаю с большие массивы и приведенный выше код работает очень медленно. Есть ли более естественный способ выполнения этой операции, который мог бы ее ускорить?
РЕДАКТИРОВАТЬ: Мне удалось получить небольшое ускорение, добавив крит в набор.
EDIT2 : Для тех, кому интересно:
Подход Джоуни: 1000 циклов, лучшее из 3: 102 мкс на цикл
numpy.in1d: 1000 циклов, лучшее из 3: 1,33 мс на цикл
EDIT3: только что снова протестировано с B = randint (10, size = 100)
Подход Джоуни: 1000 циклов, лучшее из 3: 2,96 мс на цикл
numpy.in1d: 1000 циклов, лучшее из 3: 1,34 мс на цикл
Заключение : используйте numpy.in1d (), если B не очень маленький.