- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境配置
- NumPy 数组
- NumPy - ndarray 对象
- NumPy - 数据类型
- NumPy 数组的创建和操作
- NumPy - 数组创建函数
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 数组迭代
- NumPy - 数组重塑
- NumPy - 数组连接
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组扁平化
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引与切片
- NumPy - 高级索引
- NumPy 数组属性和运算
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步幅
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组运算
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 复制与视图
- NumPy - 元素级的数组比较
- NumPy - 数组过滤
- NumPy - 数组连接
- NumPy - 排序、搜索和计数函数
- NumPy - 数组搜索
- NumPy - 数组的并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- NumPy - 数组加载
- NumPy - 数组保存
- NumPy - 向数组追加值
- NumPy - 交换数组列
- NumPy - 向数组插入轴
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 缺失数据插补
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行向量化
- NumPy - 数组的内存布局
- NumPy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级的矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级的矩阵运算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位数
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 差集
NumPy 中的差集
在 NumPy 中,差集运算用于查找在一个数组中存在但在另一个数组中不存在的元素。它通常用于比较两个数组并识别一个数组中不存在于另一个数组的唯一元素。
在 NumPy 中,使用 **setdiff1d()** 函数执行此操作。
什么是差集?
“差集”运算指的是查找在一个集合中存在但在另一个集合中不存在的元素。在 NumPy 中,此运算应用于数组,它返回第一个数组中未在第二个数组中找到的元素。
这个概念与数学集合论密切相关,其中两个集合 **A - B** 的差集包含集合 **A** 中但不在集合 **B** 中的元素。
例如,给定两个数组:
array1 = [1, 2, 3, 4, 5] array2 = [3, 4, 5, 6, 7]
差集将给出 **array1** 中不在 **array2** 中的元素,即 **[1, 2]**。
语法
以下是 NumPy 中 setdiff1d() 函数的基本语法:
numpy.setdiff1d(ar1, ar2)
其中,
- **ar1:** 第一个输入数组。它是我们要从中减去元素的数组。
- **ar2:** 第二个输入数组。它包含将从第一个数组中删除的元素。
结果是一个排序后的数组,包含存在于 **ar1** 中但不属于 **ar2** 的唯一值。
示例
在下面的示例中,我们使用 NumPy 中的 setdiff1d() 函数计算两个数组之间的差集:
import numpy as np # Define two arrays array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([3, 4, 5, 6, 7]) # Find the difference between the two arrays difference = np.setdiff1d(array1, array2) print("Difference between array1 and array2:", difference)
获得的输出如下:
Difference between array1 and array2: [1 2]
处理包含重复元素的数组
如果输入数组包含重复元素,**numpy.setdiff1d()** 函数将在执行差集运算之前删除重复项。这确保结果只包含唯一值。
示例
在这里,我们在计算差集之前删除了 **array1** 中的重复项,导致最终输出只包含唯一元素:
import numpy as np # Define arrays with duplicate elements array1 = np.array([1, 2, 2, 3, 4]) array2 = np.array([3, 4, 4, 5, 6]) # Find the difference between the arrays difference = np.setdiff1d(array1, array2) print("Difference with duplicates removed:", difference)
产生的结果如下:
Difference with duplicates removed: [1 2]
处理不同数据类型的数组
NumPy 的 **setdiff1d()** 函数可以处理不同数据类型的数组,包括整数、浮点数和字符串。
但是,该函数会在执行差集运算之前自动将数据类型转换为公共类型。
示例
让我们来看一个计算整数数组和浮点数数组之间的差集的例子:
import numpy as np # Define arrays with different data types array1 = np.array([1, 2, 3, 4.5]) array2 = np.array([4.5, 5, 6]) # Find the difference between the arrays difference = np.setdiff1d(array1, array2) print("Difference with different data types:", difference)
执行上述代码后,我们将得到以下输出:
Difference with different data types: [1. 2. 3.]
多个数组的差集
在 NumPy 中,你只能使用 **setdiff1d()** 函数一次计算两个数组之间的差集。
如果要计算多个数组的差集,可以组合使用 **setdiff1d()** 函数和循环或 **functools** 模块中的 **reduce()** 函数。
示例
以下是一个演示如何计算多个数组之间差集的示例:
import numpy as np from functools import reduce # Define multiple arrays array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([3, 4, 5, 6, 7]) array3 = np.array([5, 6, 7, 8]) # Calculate the difference of all arrays difference = reduce(lambda x, y: np.setdiff1d(x, y), [array1, array2, array3]) print("Difference of multiple arrays:", difference)
获得的输出如下所示:
Difference of multiple arrays: [1 2]
性能注意事项
**numpy.setdiff1d()** 函数非常高效,但在处理大型数组时,性能可能是一个需要考虑的因素。
如果你的数组只包含唯一元素,你可以使用 **assume_unique** 参数来加快计算速度。
示例
通过将 **assume_unique** 参数设置为 **True**,NumPy 在处理已经包含唯一元素的数组时会优化操作,从而提高性能,如下面的示例所示:
import numpy as np # Define arrays with unique elements array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([3, 4, 5, 6, 7]) # Find the difference assuming unique elements difference = np.setdiff1d(array1, array2, assume_unique=True) print("Difference with unique elements:", difference)
产生的结果如下:
Difference with unique elements: [1 2]