Python numpy.isin函数方法的使用

NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍一下NumPy中isin方法的使用。

numpy.isin

numpy.isin(element, test_elements, assume_unique=False, invert=False)     [source]

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

参数 :

element :array_like

输入数组。

test_elements :array_like

用于测试每个元素值的值。 

如果它是array或array_like,则将其展平。 

有关非类数组参数的行为,请参见注释。

assume_uniquebool, 可选

如果为True,则假定输入数组都是唯一的,

这可以加快计算速度。 默认值为False。

invert :bool, 可选

如果为True,则返回数组中的值将被反转,

就像计算元素不在test_elements中一样。 

默认值为Falsenp.isin(a,b,invert = True)

等效于(但比更快)np.invert(np.isin(a,b))

返回值 :

isin :ndarray, bool

具有与元素相同的形状。 值element [isin]在test_elements中。

Notes

isin是python关键字in的元素明智函数版本。isin(a, b)大致相当于np.array([item in b for item in a])如果a和b是1-D序列。

如果元素和test_elements还没有被转换为数组,那么它们将被转换为数组。如果test_elements是一个集合(或其他非序列集合),那么它将被转换为一个只有一个元素的对象数组,而不是test_elements中包含的值数组。这是数组构造函数处理非序列集合方式的结果。将集合转换为列表通常会得到所需的行为。

新版本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])

可以使用非零值获取匹配值的索引:

>>> 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]])
推荐阅读
cjavapy编程之路首页