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

如何找出numpy数组中出现次数最多的标签?附函数实现需求

如何找出NumPy数组中出现次数最多的标签(含平局处理)

嘿,我之前处理分类标签的时候刚好碰到过这个问题——平局时返回最先出现的值确实是个常见需求。下面给你两种靠谱的实现方式,都能完美满足你的要求:

方法一:纯NumPy原生实现(高效处理大数组)

这种方法完全基于NumPy的原生函数,性能拉满,特别适合处理大规模的数组:

import numpy as np

def most_frequent_label(arr):
    # 一次性获取唯一元素、出现次数、第一次出现的索引
    unique_vals, counts, first_indices = np.unique(
        arr, 
        return_counts=True, 
        return_index=True
    )
    # 找到最高出现次数
    max_count = np.max(counts)
    # 筛选出所有达到最高次数的候选元素及其首次索引
    mask = counts == max_count
    candidates = unique_vals[mask]
    candidate_indices = first_indices[mask]
    # 返回首次出现最早的候选元素
    return candidates[np.argmin(candidate_indices)]

核心逻辑:

  • 用np.unique()同时拿到三个关键信息:数组中的唯一元素、每个元素的出现频次、每个元素第一次出现在原数组中的位置索引
  • 先定位到最高的频次值,再筛选出所有频次等于该值的候选元素
  • 最后通过比较候选元素的首次出现索引,返回索引最小(也就是最先出现)的那个值

测试案例:

# 测试1:单一最高频元素
test_arr1 = np.array([2, 3, 2, 1, 2])
print(most_frequent_label(test_arr1))  # 输出: 2

# 测试2:平局场景,返回最先出现的元素
test_arr2 = np.array([3, 1, 3, 1, 2])
print(most_frequent_label(test_arr2))  # 输出: 3(3和1都出现2次,但3先出现)

方法二:结合Python标准库实现(直观易懂)

如果你更习惯用Python标准库,这种方法逻辑更直白,容易理解:

from collections import Counter
import numpy as np

def most_frequent_label(arr):
    # 统计每个元素的出现次数
    count_counter = Counter(arr.tolist())
    # 获取最高出现次数
    max_count = max(count_counter.values())
    # 遍历原数组,第一个出现次数等于max_count的元素就是答案
    for val in arr:
        if count_counter[val] == max_count:
            return val

核心逻辑:

  • 用Counter快速统计所有元素的出现频次
  • 遍历原数组的每一个元素,遇到第一个频次等于最高值的元素直接返回(因为是按原数组顺序遍历,所以第一个符合条件的就是最先出现的平局值)

测试案例:

用和方法一相同的测试数组,得到的结果完全一致。

两种方法各有优势:纯NumPy的方案在处理超大数组时性能更优,而标准库方案逻辑更简单,适合快速实现和调试。你可以根据自己的使用场景选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:13:28