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