numpy.isin
- numpy.isin(element, test_elements, assume_unique=False, invert=False, *, kind=None)[source]
-
Вычисляет
element in test_elements, транслируя поelementтолько. Возвращает булеву массив того же размера, что иelement, который равен True, где элементelementприсутствует вtest_elements, и False в противном случае.- Параметры:
-
- elementarray_like
-
Входной массив.
- test_elementsarray_like
-
Значения, с которыми нужно сравнить каждый элемент
element. Этот аргумент сплющивается, если это массив или array_like. См. примечания для поведения с не-array-like параметрами. - assume_uniquebool, optional
-
Если True, предполагается, что входные массивы уникальны, что может ускорить вычисление. По умолчанию False.
- invertbool, optional
-
Если True, значения в возвращаемом массиве инвертируются, как если бы вычислялось
element not in test_elements. По умолчанию False.np.isin(a, b, invert=True)эквивалентно (но быстрее), чемnp.invert(np.isin(a, b)). - kind{None, ‘sort’, ‘table’}, optional
-
Алгоритм, который необходимо использовать. Это не повлияет на конечный результат, но повлияет на скорость и использование памяти. По умолчанию None, автоматически выбирается на основе соображений памяти.
- Если ‘sort’, используется подход, основанный на сортировке слиянием. Это потребует памяти примерно в 6 раз больше суммы размеров
elementиtest_elements, не учитывая размер типов данных. - Если ‘table’, используется подход, похожий на сортировку подсчётом, основанный на таблице поиска. Доступен только для булевых и целочисленных массивов. Это потребует памяти, равной размеру
elementплюс разнице между максимальным и минимальным значениемtest_elements.assume_uniqueне имеет эффекта, когда используется опция ‘table’. - Если None, автоматически выбирается ‘table’, если требуемое выделение памяти меньше или равно 6-кратной сумме размеров
elementиtest_elements, в противном случае используется ‘sort’. Это сделано для того, чтобы по умолчанию не использовать большое количество памяти, даже если ‘table’ может быть быстрее в большинстве случаев. Если выбран ‘table’,assume_uniqueне повлияет.
- Если ‘sort’, используется подход, основанный на сортировке слиянием. Это потребует памяти примерно в 6 раз больше суммы размеров
- Возвращает:
-
- isinndarray, bool
-
Имеет такую же форму, что и
element. Значенияelement[isin]находятся вtest_elements.
Примечания
isin- это поэлементная функция, версия ключевого слова pythonin.isin(a, b)примерно эквивалентноnp.array([item in b for item in a]), еслиaиbявляются одномерными последовательностями.elementи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', если можно расширить ограничения памяти.New in version 1.13.0.
Примеры
>>> 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]])
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.isin.html