Python

Python 以 NumPy 的 unique 函數篩選陣列不重複元素教學與範例

介紹如何在 Python 中使用 NumPy 模組的 unique 函數列出陣列中所有不重複的元素,並統計每個元素出現的次數。

列出不重複元素

在 Python 中我們可以使用 numpy 模組的 unique 函數列出串列(list)中所有不重複的元素:

import numpy

# 原始數字資料
a = [3, 4, 0, 1, 3, 0, 0, 1, 4, 4]

# 列出不重複數字
print("不重複數字:", numpy.unique(a))
不重複數字: [0 1 3 4]

對於由字串所構成的串列也可以用 unique 函數來處理:

# 原始資料
b = ["A", "B", "A", "C", "B", "C", "A", "A"]

# 列出不重複元素
print("不重複元素:", numpy.unique(b))
不重複元素: ['A' 'B' 'C']

統計元素出現次數

如果想要統計串列中每一個數字出現的次數,可以在呼叫 unique 函數時將 return_counts 參數設定為 True

# 原始數字資料
a = [3, 4, 0, 1, 3, 0, 0, 1, 4, 4]

# 不重複數字與出現次數
unique, counts = numpy.unique(a, return_counts=True)
print("各數字出現次數:", dict(zip(unique, counts)))
各數字出現次數: {0: 3, 1: 2, 3: 2, 4: 3}

對於字串所構成的串列也適用:

# 原始資料
b = ["A", "B", "A", "C", "B", "C", "A", "A"]

# 不重複元素與出現次數
unique, counts = numpy.unique(b, return_counts=True)
print("各元素出現次數:", dict(zip(unique, counts)))
各元素出現次數: {'A': 4, 'B': 2, 'C': 2}

如果只需要最後建立的字典(dict)結構,可以用更簡潔的寫法:

# 原始數字資料
a = [3, 4, 0, 1, 3, 0, 0, 1, 4, 4]

# 不重複數字與出現次數
print("各數字出現次數:", dict(zip(*numpy.unique(a, return_counts=True))))
各數字出現次數: {0: 3, 1: 2, 3: 2, 4: 3}

二維陣列

unique 在處理二維以上的陣列資料時,預設會將其轉換為一維來處理(flatten):

# 二維陣列
a = numpy.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])

# 列出不重複數字
print("不重複數字:", numpy.unique(a))
不重複數字: [0 1 2 3 4]

若要列出不重複的子陣列,可以將 axis 參數設定為要進行篩選操作的維度:

# 列出不重複的子陣列
print("不重複的列:", numpy.unique(a, axis=0))
不重複的子陣列: [[1 0 0]
 [2 3 4]]

亦可計算每一個不重複列的出現次數:

# 二維陣列
a = numpy.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])

# 不重複列與出現次數
unique, counts = numpy.unique(a, axis=0, return_counts=True)
for row, cnt in zip(unique, counts):
    print("{}: {}".format(row, cnt))
[1 0 0]: 2
[2 3 4]: 1

collections 列出不重複元素

除了 numpy 模組的 unique 函數之外,亦可使用 collections 來列出不重複元素:

import collections

# 以 collections 列出不重複元素
a = [3, 4, 0, 1, 3, 0, 0, 1, 4, 4]
print(collections.Counter(a))
Counter({4: 3, 0: 3, 3: 2, 1: 2})
# 以 collections 列出不重複元素
b = ["A", "B", "A", "C", "B", "C", "A", "A"]
print(collections.Counter(b))
Counter({'A': 4, 'B': 2, 'C': 2})

參考資料:StackOverflow

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago