numpy.isin#
- numpy.isin(элемент, test_elements, assume_unique=False, инвертировать=False, *, kind=None)[источник]#
Вычисляет
element in test_elements, трансляция по элемент только. Возвращает логический массив той же формы, что и элемент которое равно True где элемент элемент находится в test_elements и False в противном случае.- Параметры:
- элементarray_like
Входной массив.
- test_elementsarray_like
Значения, с которыми сравнивается каждое значение элемент. Этот аргумент сглаживается, если это массив или подобный массиву. См. примечания о поведении с параметрами, не являющимися массивами.
- assume_uniquebool, необязательно
Если True, предполагается, что входные массивы уникальны, что может ускорить вычисление. По умолчанию False.
- инвертироватьbool, необязательно
Если True, значения в возвращаемом массиве инвертируются, как если бы вычислялось элемент не в test_elements. По умолчанию False.
np.isin(a, b, invert=True)эквивалентно (но быстрее чем)np.invert(np.isin(a, b)).- kind{None, ‘sort’, ‘table’}, опционально
Алгоритм для использования. Это не повлияет на конечный результат, но повлияет на скорость и использование памяти. Значение по умолчанию, None, выберет автоматически на основе соображений памяти.
Если 'sort', будет использован подход на основе сортировки слиянием. Это потребует памяти примерно в 6 раз больше суммы размеров элемент и test_elements, не учитывая размер типов данных.
Если ‘table’, будет использован подход с таблицей поиска, аналогичный сортировке подсчетом. Это доступно только для булевых и целочисленных массивов. Это потребует памяти размером элемент плюс максимально-минимальное значение test_elements. assume_unique не имеет эффекта при использовании опции 'table'.
Если None, автоматически выберет 'table', если требуемое выделение памяти меньше или равно 6-кратной сумме размеров элемент и test_elements, иначе будет использоваться 'sort'. Это сделано, чтобы не использовать большое количество памяти по умолчанию, даже если 'table' может быть быстрее в большинстве случаев. Если выбран 'table', assume_unique не окажет никакого эффекта.
- Возвращает:
- isinndarray, bool
Имеет ту же форму, что и элементЗначения элемент[isin] находятся в test_elements.
Примечания
isinявляется поэлементной версией ключевого слова Python в.isin(a, b)примерно эквивалентноnp.array([item in b for item in a])if a и b являются одномерными последовательностями.элемент и test_elements преобразуются в массивы, если они ещё не являются таковыми. Если test_elements является множеством (или другой неупорядоченной коллекцией), он будет преобразован в объектный массив с одним элементом, а не в массив значений, содержащихся в test_elements. Это следствие
arrayспособ обработки конструктором коллекций, не являющихся последовательностями. Преобразование множества в список обычно дает желаемое поведение.Используя
kind='table'обычно быстрее, чем kind='sort' если следующее соотношение верно:log10(len(test_elements)) > (log10(max(test_elements)-min(test_elements)) - 2.27) / 0.927, но может использовать больше памяти. Значение по умолчанию для kind будет автоматически выбран только на основе использования памяти, поэтому можно вручную установитьkind='table'если ограничения по памяти могут быть ослаблены.Примеры
>>> import numpy as np >>> element = 2*np.arange(4).reshape((2, 2)) >>> element array([[0, 2], [4, 6]]) >>> test_elements = [1, 2, 4, 8] >>> mask = np.isin(element, test_elements) >>> mask array([[False, True], [ True, False]]) >>> element[mask] array([2, 4])
Индексы совпавших значений можно получить с помощью
nonzero:>>> np.nonzero(mask) (array([0, 1]), array([1, 0]))
Тест также можно инвертировать:
>>> mask = np.isin(element, test_elements, invert=True) >>> mask array([[ True, False], [False, True]]) >>> element[mask] array([0, 6])
Из-за того, как
arrayобрабатывает множества, следующее не работает как ожидается:>>> test_set = {1, 2, 4, 8} >>> np.isin(element, test_set) array([[False, False], [False, False]])
Приведение множества к списку дает ожидаемый результат:
>>> np.isin(element, list(test_set)) array([[False, True], [ True, False]])