Python numpy.in1d函数方法的使用

numpy.in1d() 是 NumPy 中用于测试一个数组的元素是否包含在另一个数组中的函数,返回一个布尔型数组。np.in1d() 是判断数组中元素是否存在于另一个数组的利器,常用于过滤数组、集合比较、数据清洗等场景。返回布尔数组,适合用于布尔索引提取符合条件的元素。本文主要介绍一下NumPy中in1d方法的使用。

numpy.in1d

numpy.in1d(ar1, ar2, assume_unique=False, invert=False)       [source]

测试1-D数组的每个元素是否也出现在第二个数组中。

返回一个与ar1长度相同的布尔数组,该数组为true,其中ar1的元素位于ar2中,否则为False。

我们建议对新代码使用isin而不是in1d

参数 :

ar1 :(M,) array_like

输入数组。

ar2 :array_like

用于测试ar1的每个值的值。

assume_uniquebool, 可选

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

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

invertbool, 可选

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

(即,在ar1中的一个元素位于ar2中时为False,否则为True)。

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

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

 1.8.0版中的新功能。

返回值 :

in1d(M,) ndarray, bool

ar1[in1d]在ar2中。

Notes

对于1-D序列,in1d可被视为python关键字in的逐元素函数版本。in1d(a,b)大致等同于np.array([item in b for item in a])。 但是,如果ar2是一个集合或类似的(非序列)容器,则此方法将失败:ar2被转换为数组,在这种情况下为asarray( ar2)是一个对象数组,而不是包含值的预期数组。

1.4.0版的新功能。

例子

1)基本用法

import numpy as np

a = np.array([0, 1, 2, 5, 0])
b = np.array([0, 1])

result = np.in1d(a, b)
print(result)  # [ True  True False False  True]

2)结合布尔索引筛选元素

import numpy as np

a = np.array([0, 1, 2, 5, 0])
b = np.array([0, 1])

mask = np.in1d(a, b)
print(a[mask])  # [0 1 0]

3)使用 invert=True 取反结果

import numpy as np

a = np.array([0, 1, 2, 5, 0])
b = np.array([0, 1])

# 找出 a 中不在 b 中的元素
result = np.in1d(a, b, invert=True)
print(result)     # [False False  True  True False]
print(a[result])  # [2 5]

推荐阅读
cjavapy编程之路首页