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 # 定义两个数组 array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([3, 4, 5, 6, 7]) # 计算两个数组之间的差异 difference = np.setdiff1d(array1, array2) print("数组1 和数组2 之间的差异:",difference)
以下是得到的输出 -
数组1 和数组2 之间的差异:[1 2]
处理包含重复元素的数组
如果输入数组包含重复元素,numpy.setdiff1d() 函数将在执行差异运算之前删除重复元素。这确保结果仅包含唯一值。
示例
这里,我们在计算差值之前删除了 array1 中的重复项,最终输出仅包含唯一元素 -
import numpy as np # 定义包含重复元素的数组 array1 = np.array([1, 2, 2, 3, 4]) array2 = np.array([3, 4, 4, 5, 6]) # 计算数组之间的差值 difference = np.setdiff1d(array1, array2) print("删除重复项后的差值:", Difference)
结果如下 -
差值已删除重复项:[1 2]
处理不同数据类型的数组
NumPys 的 setdiff1d() 函数可以处理不同数据类型的数组,包括整数、浮点数和字符串。
但是,该函数会在执行差值运算之前自动将数据类型转换为通用类型。
示例
让我们看一个计算整数数组和浮点数组之差的示例 -
import numpy as np # 定义不同数据类型的数组 array1 = np.array([1, 2, 3, 4.5]) array2 = np.array([4.5, 5, 6]) # 计算数组之间的差值 difference = np.setdiff1d(array1, array2) print("不同数据类型的差异:", Difference)
执行上述代码后,我们得到以下输出 -
不同数据类型的差异:[1. 2. 3.]
多个数组的差值计算
在 NumPy 中,你只能使用 setdiff1d() 函数来同时计算两个数组的差值。
如果你想计算多个数组的差值,你可以结合使用 setdiff1d() 函数和循环,或者使用 functools 模块中的 reduce() 函数。
示例
以下示例演示了如何计算多个数组的差值 -
import numpy as np from functools import reduce # 定义多个数组 array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([3, 4, 5, 6, 7]) array3 = np.array([5, 6, 7, 8]) # 计算所有数组的差值 difference = reduce(lambda x, y: np.setdiff1d(x, y), [array1, array2, array3]) print("多个数组的差值:", Difference)
输出结果如下 -
多个数组的差值:[1 2]
性能考虑
numpy.setdiff1d() 函数效率很高,但在处理大型数组时,性能可能是一个需要考虑的问题。
如果你的数组只包含唯一的元素,可以使用 assume_unique 参数来加快计算速度。
示例
通过将 assume_unique 参数设置为 True,NumPy 会在处理已包含唯一元素的数组时优化操作,从而提高性能,如下例所示 -
import numpy as np # 定义包含唯一元素的数组 array1 = np.array([1, 2, 3, 4, 5]) array2 = np.array([3, 4, 5, 6, 7]) # 假设元素唯一,求差值 difference = np.setdiff1d(array1, array2, assume_unique=True) print("包含唯一元素的差值:", Difference)
结果如下 −
包含唯一元素的差值:[1 2]