[Python][Numpy]unique找出陣列中相同的數值

閱讀時間約 4 分鐘

np.unique 是 NumPy 庫中的一個函數,用於找出陣列中的相同的數值。這個函數可以單純過濾只取唯一值出來,也可以選擇性地返回這些唯一值在原始陣列中的中的索引和計數。


函式

unique = np.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)

參數

  • ar: 輸入數組。可以是任何形狀的陣列
  • return_index: 如果設置為 True,將返回唯一值在原始陣列中的索引。
  • return_inverse: 如果設置為 True,將返回原始數組重構為唯一值陣列的索引。
  • return_counts: 如果設置為 True,將返回唯一值的計數。
  • axis: 如果設置,則沿指定軸查找唯一值。

返回值

  • unique: 唯一值的陣列,按照排序順序返回。
  • unique_indices: (可選)唯一值在原始數組中的第一個出現索引。
  • unique_inverse: (可選)用於重構原始數組的索引。
  • unique_counts: (可選)唯一值的計數。

使用範例

單純使用 找出唯一值

import numpy as np

# 1D
a = np.unique([1, 1, 2, 2, 3, 3])
print(a) # [1 2 3]

# 2D
b = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
b_res = np.unique(b, axis=0)
print(b_res)
#[[1 0 0]
# [2 3 4]]

取出唯一值的索引

返回出兩個陣列,第一個u包含的是唯一值,第二個indices包含的是這些唯一值的索引。

import numpy as np

a = np.array(['a', 'b', 'b', 'c', 'a'])
u, indices = np.unique(a, return_index=True)

print(u) #['a' 'b' 'c']
print(indices) #[0 1 3]
print(a[indices]) #['a' 'b' 'c']

重構索引數組

import numpy as np

a = np.array([1, 2, 6, 4, 2, 3, 2])
u, indices = np.unique(a, return_inverse=True)
print(u) # [1 2 3 4 6]
print(indices) #[0 1 4 3 1 2 1]
print(u[indices]) #[1 2 6 4 2 3 2]

分步解釋

  1. 原始數組 a:
    a = np.array([1, 2, 6, 4, 2, 3, 2])
    • 原始數組 a 包含了以下元素: [1, 2, 6, 4, 2, 3, 2]
  2. 調用 np.unique 並返回唯一值和重構索引:
    u, indices = np.unique(a, return_inverse=True)
    • u 是 a 中的唯一值,並且是排序後的結果。
    • indices 是一個數組,它包含了 a 中每個元素在 u 中的位置索引。
  3. 唯一值數組 u:
    print(u)  # [1 2 3 4 6]
    • u 包含了 a 中的唯一值,並且是排序後的結果: [1, 2, 3, 4, 6]
  4. 重構索引數組 indices:
    print(indices)  # [0 1 4 3 1 2 1]
    • indices 包含了 a 中每個元素在 u 中的位置索引。1 在 u 中的位置是 02 在 u 中的位置是 16 在 u 中的位置是 44 在 u 中的位置是 32 在 u 中的位置是 13 在 u 中的位置是 22 在 u 中的位置是 1
  5. 重構原始數組 a:
    print(u[indices])  # [1 2 6 4 2 3 2]
    • 使用 u 和 indices 可以重構原始數組 a。
    • u[indices] 會將 indices 中的每個索引替換為 u 中相應的位置的值,從而得到原始數組 a。

計算唯一值出現的次數

返回出兩個陣列,第一個values包含的是唯一值,第二個counts包含的是這些唯一值出現的次數。

import numpy as np

a = np.array([1, 2, 6, 4, 2, 3, 2])
values, counts = np.unique(a, return_counts=True)
print(values) #[1 2 3 4 6]
print(counts) #[1 3 1 1 1]


參考文獻




52會員
112內容數
Python程式設計師,不是在學習就是在學習的路上
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Python中的函式操作們(上)今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
avatar
媗日
2024-04-25
Python四大容器大解析古有四大名著,現今Python四大容器🤣 哪四個?list串列,tuple元組,dict字典,set集合。 那這四個怎麼分? 一起來看看吧! (以下有手寫與上機實際測試請付費觀看) 以上我精心整理主要會使用到的功能 當然python功能太多了,肯定不只。 實際操作: 大概就這樣?(
Thumbnail
avatar
媗日
2024-04-06
【Python】Mac平台上的Jython和JES安裝指導先來名詞解釋jython跟JES: jython是一種實現了Python語言的Java平台版本的解釋器。它允許開發人員在Java虛擬機(JVM)上運行Python代碼,從而實現了Python語言與Java平台的無縫集成。 JES(Jython Environment for Students)是
Thumbnail
avatar
W. C. Chen
2024-03-27
【Python】Python在ETL處理的事先準備 - CSV、Excel、SQLite和SQLAlchemyETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
avatar
W. C. Chen
2024-03-25
【Python超簡單】Python 變數的基本觀念在求學階段,你已經對代數的計算熟到不能再熟,所以變數(variable)對你來說應該不至於太陌生,先來看看以下這個例子:   
avatar
伯亞
2024-03-22
【Python 知識科普】 關於WSGI與ASGI 使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
Thumbnail
avatar
阿Han
2024-03-19
【Python超簡單】Python 開發工具及其安裝過程想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
avatar
伯亞
2024-03-19
Python pyqt學習筆記 物件拖曳[Kurt]本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
Thumbnail
avatar
hls Ding
2024-03-13
【Python 軍火庫🧨 - websockets】傳送/接收音檔並轉換成numpy(基礎篇) 關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
Thumbnail
avatar
阿Han
2024-02-12
Python — Numpy max() maximum()Max和Maximum的差別為 np.max() 最少接收一個參數,回傳所有內容的最大值 結果 np.maximum(A, B) 最少接收兩個參數,回傳A與B逐個比較的最大值 結果
avatar
John
2022-05-08