You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效统计Numpy大数组中子数组的出现频次?

更快的实现方式

针对大数据量的numpy数组统计子数组出现次数,有两种高效的替代方案,能避免Python循环带来的性能开销:

方法一:使用numpy原生的np.unique

利用numpy的向量化操作直接获取唯一子数组和对应计数,底层由C实现,速度远快于Python循环:

import numpy as np

array = np.array([
                   [1,2],[1,2],[2,3],
                   [1,2],[2,3],[5,2]])

# 指定axis=0按行去重,同时返回每个唯一行的出现次数
unique_arrays, counts = np.unique(array, axis=0, return_counts=True)
# 转换为目标字典格式
result = {tuple(arr): cnt for arr, cnt in zip(unique_arrays, counts)}
print(result)

方法二:使用collections.Counter

借助Python标准库的Counter工具,配合map批量转换子数组为元组,内部实现经过优化,比手动循环计数更高效:

import numpy as np
from collections import Counter

array = np.array([
                   [1,2],[1,2],[2,3],
                   [1,2],[2,3],[5,2]])

# 直接统计转成元组后的子数组出现次数
result = Counter(map(tuple, array))
# 转换为普通字典(可选,Counter本身也支持字典操作)
print(dict(result))

两种方法的输出结果均与原代码一致:{(1, 2): 3, (2, 3): 2, (5, 2): 1},在数组行数较多时,性能提升非常显著。

内容的提问来源于stack exchange,提问作者islam abdelmoumen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:15:50