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