numpy.isin #

麻木的。isin ( element , test_elements , Should_unique = False , invert = False , * , kind = None ) [来源] #

计算,仅在元素上广播。返回与element形状相同的布尔数组,如果element的元素在test_elements中,则返回True ,否则返回 False。element in test_elements

参数
类似元素数组

输入数组。

test_elements array_like

用于测试element的每个值的值。如果该参数是数组或类似 array,则该参数将被展平。请参阅有关非类似数组参数的行为的注释。

假设_unique布尔值,可选

如果为 True,则假定输入数组都是唯一的,这可以加快计算速度。默认值为 False。

反转布尔值,可选

如果为 True,则返回数组中的值将被反转,就好像计算元素不在 test_elements 中一样。默认值为 False。 相当于(但比) 更快。np.isin(a, b, invert=True)np.invert(np.isin(a, b))

kind {无, '排序', '表格'}, 可选

要使用的算法。这不会影响最终结果,但会影响速度和内存使用。默认值无,将根据内存考虑自动选择。

  • 如果“排序”,将使用基于合并排序的方法。这将具有大约ar1ar2大小总和的 6 倍的内存使用量 ,不考虑 dtype 的大小。

  • 如果是“table”,将使用类似于计数排序的查找表方法。这仅适用于布尔数组和整数数组。这将具有ar1大小加上ar2的最大最小值的内存使用量。当使用 'table' 选项时, assume_unique 不起作用。

  • 如果没有,如果所需的内存分配小于或等于ar1ar2大小总和的 6 倍,将自动选择“table”,否则将使用“sort”。这样做是为了默认情况下不使用大量内存,尽管“表”在大多数情况下可能更快。如果选择“table”,则 assume_unique将不起作用。

返回
isin ndarray,布尔

与element具有相同的形状。值element[isin] 位于test_elements中。

也可以看看

in1d

该函数的扁平化版本。

numpy.lib.arraysetops

具有许多其他函数的模块,用于对数组执行集合操作。

笔记

isin是中python 关键字的逐元素函数版本。 大致相当于 ab一维序列。isin(a, b)np.array([item in b for item in a])

elementtest_elements如果尚未转换为数组,则将其转换为数组。如果test_elements是一个集合(或其他非序列集合),它将转换为包含一个元素的对象数组,而不是test_elements中包含的值的数组。这是array构造函数处理非序列集合的方式的结果。将集合转换为列表通常会给出所需的行为。

如果满足以下关系,则 使用kind='table'往往比kind='sort'更快,但可能会使用更多内存。kind的默认值将仅根据内存使用情况自动选择,因此如果可以放宽内存限制,可以手动设置。log10(len(ar2)) > (log10(max(ar2)-min(ar2)) - 2.27) / 0.927kind='table'

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]])