如何从 numpy 数组中,统计每个值出现的个数,可以利用 python 标准库的 collections 模块提供的计数器类 Counter,也可以通过 numpy 的 unique 函数进行操作;如 numpy 数组的每个值对应样本特征索引时,可以先统计特征的分布进行数据分析。
collections.Counter
collections 模块的 Counter 对象可以支持针对 numpy 数组的快速计数,它本身是 dict 的子类,具体示例如下:
import numpy as np
from collections import Counter
arr = np.array([1, 2, 6, 8, 2, 4, 7, 9, 1, 2, 5, 6, 8, 8, 8])
counter = Counter(arr)
print(counter)
# 返回一个列表,包含 counter 中 n 个最大数目的元素
print(counter.most_common(3))
输出如下:
Counter({8: 4, 2: 3, 1: 2, 6: 2, 4: 1, 7: 1, 9: 1, 5: 1}) [(8, 4), (2, 3), (1, 2)]
numpy 的 unique 函数
也可以用 numpy 的 unique 函数,该函数多用于数组值去重,但是通过设置 return_counts=True 可以作为值计数用,具体示例如下:
import numpy as np
from collections import Counter
arr = np.array([1, 2, 6, 8, 2, 4, 7, 9, 1, 2, 5, 6, 8, 8, 8])
unique, counts = np.unique(arr, return_counts=True)
print(unique)
print(counts)
print(np.asarray((unique, counts)).T)
输出如下:
[1 2 4 5 6 7 8 9] [2 3 1 1 2 1 4 1] [[1 2] [2 3] [4 1] [5 1] [6 2] [7 1] [8 4] [9 1]]