NumPy参考 >例行程序 >Set routines > numpy.isin
numpy.
isin
(element,test_elements,假定_unique = False,invert = False )[源代码] ¶计算test_elements中的元素,仅在元素上广播。返回与元素具有相同形状的布尔数组,如果元素的元素在test_elements中,则返回True,否则返回 False。
输入数组。
用于测试element的每个值的值。如果它是array或array_like,则将其展平。有关非类数组参数的行为,请参见注释。
如果为True,则假定输入数组都是唯一的,这可以加快计算速度。默认值为False。
如果为True,则返回数组中的值将被反转,就像计算元素不在test_elements中一样。默认值为False。
等效于(但比更快)。np.isin(a, b, invert=True)
np.invert(np.isin(a, b))
与element具有相同的形状。值element [ isin ] 在test_elements中。
也可以看看
in1d
此功能的拼合版本。
numpy.lib.arraysetops
具有许多其他功能的模块,用于对阵列执行设置操作。
笔记
isin
是Python关键字的逐元素功能版本在。
大致相当于
如果一个和b是1- d序列。isin(a, b)
np.array([item in b for item in a])
如果element和test_elements尚未转换为数组,则将它们转换为数组。如果test_elements是一个集合(或其他非序列集合),它将被转换为具有一个元素的对象数组,而不是test_elements中包含的值的数组。这是array
构造函数处理非序列集合的方式的结果。将集合转换为列表通常可以实现所需的行为。
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]])