Вопрос об индексировании Numpy.array

Я пытаюсь создать «маску» 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 не очень маленький.

6
задан aduric 22 October 2010 в 14:11
поделиться