Pytorch中的众数

1. 众数的基础概念

众数(Mode) 是统计学中的基本概念,指的是在一组数据中出现频率最高的数值

  • 如果一组数据中有多个数值出现的频率相同且都是最高,那么这组数据就有多个众数
  • 如果所有数值出现的频率都相同,那么这组数据没有众数
  • 众数是唯一不要求数据是数值型的统计量(比如 "苹果", "苹果", "香蕉" 的众数是"苹果"),但在 PyTorch 中仅支持数值型张量。

2. PyTorch 中 torch.mode() 的用法

torch.mode() 专门用于计算张量的众数,核心参数是 dim(指定计算维度),返回两个张量:

  • values:对应维度上的众数值;
  • indices:众数值在原张量中的索引位置。
完整示例代码
python 复制代码
import torch

# 示例1:一维张量的众数
a = torch.tensor([1, 2, 2, 3, 3, 3, 4])
mode_val, mode_idx = torch.mode(a)
print("一维张量众数:", mode_val.item())  # 输出 3(3出现次数最多)
print("众数索引:", mode_idx.item())     # 输出 3(3第一次出现在索引3的位置)

# 示例2:二维张量按维度计算众数
b = torch.tensor([[1, 2, 2], 
                  [3, 3, 4], 
                  [3, 2, 2]])

# 按列(dim=0)计算众数:每一列的众数
mode_col_val, mode_col_idx = torch.mode(b, dim=0)
print("按列众数:", mode_col_val)  # 输出 tensor([3, 2, 2])
print("按列众数索引:", mode_col_idx)  # 输出 tensor([1, 0, 0])

# 按行(dim=1)计算众数:每一行的众数
mode_row_val, mode_row_idx = torch.mode(b, dim=1)
print("按行众数:", mode_row_val)  # 输出 tensor([2, 3, 2])
print("按行众数索引:", mode_row_idx)  # 输出 tensor([1, 0, 1])
特殊情况说明

如果张量中有多个数值出现频率相同且最高,torch.mode() 会返回最先出现的那个数值:

python 复制代码
c = torch.tensor([1, 1, 2, 2, 3])  # 1和2都出现2次(最高)
mode_c, idx_c = torch.mode(c)
print("多众数时返回最先出现的:", mode_c.item())  # 输出 1

总结

  1. 核心定义 :众数是一组数据中出现次数最多的数值,是描述数据集中趋势的统计量(和均值、中位数并列)。
  2. PyTorch 用法torch.mode() 计算张量众数,指定 dim 可按维度计算,返回"众数值+首次出现索引"。
  3. 特殊规则 :存在多个众数时,PyTorch 会返回最先出现的那个数值。
相关推荐
火山引擎开发者社区2 分钟前
当 AI 内容真假难辨,谁来为真实签名 —— 证书中心 C2PA 内容可信溯源服务正式发布
人工智能
百万蹄蹄向前冲9 分钟前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
米小虾18 分钟前
你的 harness 技巧有保质期:176 组对照实验显示,上下文管理的收益从 35.7 分跌到 2.7 分
人工智能·agent
飞哥数智坊18 分钟前
一个周末,6个项目,我第一次感觉 AI 编程真的进入了新阶段
人工智能·ai编程
AOI小白新手上路20 分钟前
秦方方 2025《基于深度学习的单幅图像去雨算法研究与应用》( 河南理工硕士论文)蒸馏文档
人工智能
米小虾22 分钟前
一周 AI 观察(9.15–9.21):同一个星期里,token 有了官方标准,Gemini 进了三家真实公司,TPU 变成了抵押品
人工智能
冬奇Lab22 分钟前
LLM 自动化测试系列(01):为什么测试是 LLM 落地的新战场
人工智能
冬奇Lab30 分钟前
一天一个开源项目(第224篇):ARTEMIS —— 谷歌开源的移动端 AI 自动化框架,让 AI 助手像人一样操作手机
人工智能·开源·测试
蓝速科技1 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
数数科技的数据干货1 小时前
把数据工作交给Agent,从 AE-CLI 开始
人工智能