NumPy - 并集
NumPy 中的并集
在 NumPy 中,"union"(并集)指的是将两个或多个数组的元素组合起来,并移除任何重复值的操作。
当您想要合并多个数据集或数组,并确保最终结果中每个元素只出现一次时,通常会使用它。
NumPy 提供了 numpy.union1d() 函数来轻松找到两个一维数组的并集。
什么是数组的并集?
两个或多个数组的并集指的是来自所有输入数组的唯一元素的组合集合。
这意味着结果中不存在重复元素。并集操作与数学中的集合概念密切相关。
例如,如果您有两个数组,包含一些共同元素和一些唯一元素,并集将包含来自两个数组的所有唯一元素。
NumPy union1d() 函数
在 NumPy 中,numpy.union1d() 函数用于计算两个一维数组的并集。该函数确保结果中没有重复元素,即使相同元素出现在两个输入数组中。
以下是 NumPy union1d() 函数的基本语法 −
numpy.union1d(ar1, ar2)
其中,ar1 和 ar2 是要计算并集的两个输入数组。数组可以包含任何数据类型,并且可能有重叠元素或没有重叠元素。
示例
在以下示例中,我们使用 NumPy 中的 union1d() 函数计算两个数组的并集 −
import numpy as np
# 定义两个数组
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([4, 5, 6, 7, 8])
# 找到两个数组的并集
union = np.union1d(array1, array2)
print("Union of array1 and array2:", union)
从输出中可以看到,array1 和 array2 的并集包含来自两个数组的所有唯一元素,没有任何重复。数字 4 和 5 在两个数组中都出现过,但在最终结果中只出现一次 −
Union of array1 and array2: [1 2 3 4 5 6 7 8]
不同数据类型的数组并集
NumPy 的 union1d() 函数还可以处理不同数据类型的数组,例如整数、浮点数甚至字符串。该函数会在计算并集之前将所有元素转换为共同类型。
示例
如下例所示,NumPy 自动将所有元素转换为浮点数,因为第一个数组包含浮点数,并且并集中没有重复项 −
import numpy as np
# 定义不同数据类型的数组
array1 = np.array([1, 2, 3, 4.5])
array2 = np.array([4.5, 5, 6, 7])
# 找到数组的并集
union = np.union1d(array1, array2)
print("Union of array1 and array2 with different types:", union)
产生的结果如下 −
Union of array1 and array2 with different types: [1. 2. 3. 4.5 5. 6. 7.]
处理多个数组
numpy.union1d() 函数一次处理两个数组。但是,如果需要找到超过两个数组的并集,可以使用循环或 functools 模块中的 reduce() 函数。
示例
下面是一个演示如何计算三个数组并集的示例 −
import numpy as np
from functools import reduce
# 定义多个数组
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([4, 5, 6, 7, 8])
array3 = np.array([7, 8, 9, 10])
# 找到所有数组的并集
union = reduce(np.union1d, [array1, array2, array3])
print("Union of multiple arrays:", union)
从输出中可以看到,并集操作组合了来自三个数组的所有唯一元素。没有重复项,并集包含数组中的所有唯一值 −
Union of multiple arrays: [1 2 3 4 5 6 7 8 9 10]
包含重复元素的数组的并集
当输入数组包含重复元素时,numpy.union1d() 会自动在最终结果中移除它们。这确保返回的并集仅包含唯一元素。
示例
以下是一个查找包含重复元素的数组并集的示例 −
import numpy as np
# 定义包含重复元素的数组
array1 = np.array([1, 2, 2, 3, 4])
array2 = np.array([3, 4, 4, 5, 6])
# 查找数组的并集
union = np.union1d(array1, array2)
print("Union with duplicates removed:", union)
得到的输出如下所示 −
Union with duplicates removed: [1 2 3 4 5 6]
字符串数组的并集
在 NumPy 中,您也可以对包含字符串的数组执行并集操作。该函数将组合两个数组中的所有唯一字符串。
示例
让我们看一个字符串数组的示例 −
import numpy as np
# 定义包含字符串的数组
array1 = np.array(['apple', 'banana', 'cherry'])
array2 = np.array(['banana', 'cherry', 'date'])
# 查找字符串数组的并集
union = np.union1d(array1, array2)
print("Union of string arrays:", union)
我们得到以下输出 −
Union of string arrays: ['apple' 'banana' 'cherry' 'date']
性能考虑
numpy.union1d() 函数效率很高,但性能取决于输入数组的大小。当处理非常大的数组时,确保数组尽可能高效是个好主意。
例如,如果数组仅包含唯一元素,您可以将 assume_unique 参数设置为 True 以加速并集操作:
示例
通过假设数组仅包含唯一元素,NumPy 可以更快地执行并集操作,如以下示例所示 −
import numpy as np
# 定义包含唯一元素的数组
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([6, 7, 8, 9, 10])
# 假设唯一元素查找并集
union = np.union1d(array1, array2)
print("Union of unique arrays:", union)
产生的结果如下 −
Union of unique arrays: [1 2 3 4 5 6 7 8 9 10]