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]
广告