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

如何在Python中实现矩阵向量的COUNT+GROUP BY统计?

用Python统计矩阵中不同向量的出现次数

其实这个需求在Python里实现起来挺简单的,核心问题是列表是可变类型,不能直接作为字典的键(字典键需要是可哈希类型),所以我们只要把每个子向量转成不可变的元组,就能用字典或者专门的计数工具来统计了。我给你分享几个常用的巧妙实现:

方法一:用collections.Counter(最简洁)

Counter是Python标准库里专门用来做计数的工具,简直是为这个需求量身定做的:

from collections import Counter

matrix = [[1, 2, 3], [2, 3, 1], [1, 2, 3], [2, 3, 1], [2, 3, 1]]

# 把每个子列表转成元组(元组不可变、可哈希),传给Counter统计
counted = Counter(tuple(row) for row in matrix)

# 转换成你要的格式:[次数, 原向量]
result = [[count, list(vec)] for vec, count in counted.items()]

print(result)
# 输出:[[2, [1, 2, 3]], [3, [2, 3, 1]]]

方法二:用collections.defaultdict手动统计

如果你想更灵活地控制计数过程(比如中间要加一些额外逻辑),可以用defaultdict自己实现统计逻辑:

from collections import defaultdict

matrix = [[1, 2, 3], [2, 3, 1], [1, 2, 3], [2, 3, 1], [2, 3, 1]]
count_dict = defaultdict(int)

for row in matrix:
    # 同样转元组当键,每遇到一次对应向量就计数+1
    count_dict[tuple(row)] += 1

# 转成目标格式
result = [[count, list(vec)] for vec, count in count_dict.items()]

print(result)

额外优化:按次数排序

如果你希望结果按出现次数从高到低排列,可以给结果加个排序逻辑:

# 按次数降序排序
sorted_result = sorted(result, key=lambda x: -x[0])
print(sorted_result)
# 输出:[[3, [2, 3, 1]], [2, [1, 2, 3]]]

本质上这两种方法都是利用了**哈希表(字典)**的特性,和SQL里GROUP BY + COUNT的逻辑完全一致——先把相同的向量归为一组(用哈希键区分),再统计每组的数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:04:07