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

如何获取二维NumPy数组中出现最频繁的唯一行组合?

获取二维NumPy数组中出现最频繁的唯一行

你需要的是找到数组中整行重复次数最多的唯一行,而非scipy.stats.mode(axis=0)返回的"各列众数拼接行"。以下是两种可行的解决方案:

方法一:纯NumPy实现(无额外依赖)

利用np.unique按行去重并统计次数,再筛选出次数最多的行:

import numpy as np

arr1 = np.array([[2,3,4],[2,1,5],[1,2,3],[2,4,4],[2,8,2],[2,3,1],[9,9,9],[9,9,9]])

# 按行去重,同时返回每行的出现次数
unique_rows, counts = np.unique(arr1, axis=0, return_counts=True)

# 找到出现次数最多的行的索引
max_idx = np.argmax(counts)

# 获取结果
most_frequent_row = unique_rows[max_idx]
print(most_frequent_row)  # 输出: [9 9 9]
print(f"出现次数: {counts[max_idx]}")  # 输出: 出现次数: 2

方法二:利用Pandas简化操作

如果你的环境已安装Pandas,可以用value_counts快速实现:

import pandas as pd
import numpy as np

arr1 = np.array([[2,3,4],[2,1,5],[1,2,3],[2,4,4],[2,8,2],[2,3,1],[9,9,9],[9,9,9]])

# 转成DataFrame后统计行的出现频率
df = pd.DataFrame(arr1)
most_frequent_row = df.value_counts().idxmax()

# 转换为NumPy数组格式输出
print(most_frequent_row.values)  # 输出: [9 9 9]

为什么scipy.stats.mode(axis=0)不符合需求?

stats.mode(axis=0)是对数组的每一列独立计算众数,再将各列的众数拼接成一行。比如你的示例中,第一列的众数是2(出现5次),第二列的众数是3(出现2次),第三列的众数是4(出现2次),所以拼接出[2,3,4],但这行在原数组中只出现过1次,并非整行重复最多的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:50:20