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 {无, '排序', '表格'}, 可选
要使用的算法。这不会影响最终结果,但会影响速度和内存使用。默认值无,将根据内存考虑自动选择。
如果“排序”,将使用基于合并排序的方法。这将具有大约ar1和ar2大小总和的 6 倍的内存使用量 ,不考虑 dtype 的大小。
如果是“table”,将使用类似于计数排序的查找表方法。这仅适用于布尔数组和整数数组。这将具有ar1大小加上ar2的最大最小值的内存使用量。当使用 'table' 选项时, assume_unique 不起作用。
如果没有,如果所需的内存分配小于或等于ar1和ar2大小总和的 6 倍,将自动选择“table”,否则将使用“sort”。这样做是为了默认情况下不使用大量内存,尽管“表”在大多数情况下可能更快。如果选择“table”,则 assume_unique将不起作用。
- 返回:
- isin ndarray,布尔
与element具有相同的形状。值element[isin] 位于test_elements中。
也可以看看
in1d
该函数的扁平化版本。
numpy.lib.arraysetops
具有许多其他函数的模块,用于对数组执行集合操作。
笔记
isin
是中python 关键字的逐元素函数版本。 大致相当于 a和b是一维序列。isin(a, b)
np.array([item in b for item in a])
element和test_elements如果尚未转换为数组,则将其转换为数组。如果test_elements是一个集合(或其他非序列集合),它将转换为包含一个元素的对象数组,而不是test_elements中包含的值的数组。这是
array
构造函数处理非序列集合的方式的结果。将集合转换为列表通常会给出所需的行为。如果满足以下关系,则 使用
kind='table'
往往比kind='sort'更快,但可能会使用更多内存。kind的默认值将仅根据内存使用情况自动选择,因此如果可以放宽内存限制,可以手动设置。log10(len(ar2)) > (log10(max(ar2)-min(ar2)) - 2.27) / 0.927
kind='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]])