pytorch小记(三):pytorch中的最大值操作:x.max()

devtools/2025/1/16 1:12:27/

pytorch小记(三):pytorch中的最大值操作:x.max()

      • 初始化张量:
      • 1. `x.max(dim=0)`
        • 对比每个位置的值:
        • 合并最大值:
      • 2. `x.max(dim=1)`
      • 3. `x.max(dim=2)`
      • 总结


在 PyTorch 中,x.max(dim=n) 表示沿指定维度 dim 求张量的最大值,并返回 最大值最大值的索引。我们逐步分析 dim=0, dim=1, 和 dim=2 的行为。


初始化张量:

python">x = torch.arange(8).reshape(2, 2, 2)
print(x)

输出

tensor([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])
  • x 是一个 3D 张量,形状为 (2, 2, 2)
    • 第一维度(dim=0)有 2 个块。
    • 第二维度(dim=1)有 2 行。
    • 第三维度(dim=2)有 2 列。

1. x.max(dim=0)

含义

  • 沿着第 0 维(块的方向)比较,保留 其他维度
  • 比较时,将每个位置的两个块中元素逐个比较,选出最大值。

计算过程

[[0, 1],    [2, 3]]         # 块 0|  |       |  |
[[4, 5],    [6, 7]]         # 块 1

我们沿第 0 维比较,即逐个元素比较块 0 和块 1 对应位置的值,得到最大值:

对比每个位置的值:
  • 对位置 [0, 0] 比较:
    块 0: 0, 块 1: 4 => 最大值是 4
    
  • 对位置 [0, 1] 比较:
    块 0: 1, 块 1: 5 => 最大值是 5
    
  • 对位置 [1, 0] 比较:
    块 0: 2, 块 1: 6 => 最大值是 6
    
  • 对位置 [1, 1] 比较:
    块 0: 3, 块 1: 7 => 最大值是 7
    
合并最大值:

将每个位置的最大值整合成新的张量:

[[4, 5],[6, 7]]

输出

python">Max: torch.return_types.max(values=tensor([[4, 5],[6, 7]]),indices=tensor([[1, 1],[1, 1]]))
  • 最大值为 tensor([[4, 5], [6, 7]]),形状为 (2, 2)
  • 索引为 tensor([[1, 1], [1, 1]]),表示在第 0 维中,每个位置最大值来自第 1 块(索引 1)。

2. x.max(dim=1)

含义

  • 沿着第 1 维(行的方向)比较,保留 其他维度
  • 比较时,将每个块中的两行逐个比较,选出最大值。

计算过程

块 0:
[[0, 1],        =>  [2, 3][2, 3]]
块 1:
[[4, 5],        =>  [6, 7][6, 7]]

输出

python">Max: torch.return_types.max(values=tensor([[2, 3],[6, 7]]),indices=tensor([[1, 1],[1, 1]]))
  • 最大值为 tensor([[2, 3], [6, 7]]),形状为 (2, 2)
  • 索引为 tensor([[1, 1], [1, 1]]),表示在第 1 维中,每个位置最大值来自第 1 行(索引 1)。

3. x.max(dim=2)

含义

  • 沿着第 2 维(列的方向)比较,保留 其他维度
  • 比较时,将每行中的两列逐个比较,选出最大值。

计算过程

块 0:
[0, 1],        =>  [1]
[2, 3],        =>  [3]
块 1:
[4, 5],        =>  [5]
[6, 7]         =>  [7]

输出

python">Max: torch.return_types.max(values=tensor([[1, 3],[5, 7]]),indices=tensor([[1, 1],[1, 1]]))
  • 最大值为 tensor([[1, 3], [5, 7]]),形状为 (2, 2)
  • 索引为 tensor([[1, 1], [1, 1]]),表示在第 2 维中,每个位置最大值来自第 1 列(索引 1)。

总结

  • dim=0:在 块的方向 比较,结果保留每个位置的 行和列
  • dim=1:在 行的方向 比较,结果保留每个位置的 块和列
  • dim=2:在 列的方向 比较,结果保留每个位置的 块和行

图示化总结:

dim=0:  [[0, 1],       [[4, 5],         =>  [[4, 5],[2, 3]]        [6, 7]]             [6, 7]]dim=1:  [[0, 1],       [[2, 3],         =>  [[2, 3],[2, 3]]        [6, 7]]             [6, 7]]dim=2:  [[0, 1],       [[1],            =>  [[1, 3],[2, 3]]        [3]]                 [5, 7]]

http://www.ppmy.cn/devtools/150800.html

相关文章

智能网联汽车技术底盘线控技术

底盘线控是通过CAN总线来进行控制的; CAN收发器类似于ECU或者是单片机,作用是用于发送高低电平,控制CAN的差分信号; 终端电阻又被称作为数据传输终端:防止数据以回声的形式在线段被反射; CAN总线如何传输…

【PGCCC】PostgreSQL 临时文件的使用

临时文件 某些查询操作(例如sort或hash表)需要一些内存功能。此内存由运行时配置提供work_mem。 来自官方文档work_mem work_mem (整数) 设置在写入临时磁盘文件之前查询操作(例如排序或哈希表)使用的基本最大内存量。 请注意&…

【初体验】【学习】Web Component

序言 欢迎来到2025年的第一篇博客!新的一年,将持续深耕于新知识的学习,并不断深化对已有知识的理解。目标是构建一个更加系统化、结构化的知识体系,以更好地应对未来的挑战与机遇。 前言 需要以下基础: Web Compon…

2025软件测试面试题大全(含答案)备战“金三银四”

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 001、软件的生命周期(prdctrm) 计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(running m…

图形验证码是怎样保护登录安全的?

图形验证码是一种广泛应用于网络安全领域的技术手段,其主要目的是防止恶意用户对系统进行暴力破解等攻击行为。以下将详细介绍图形验证码的原理及作用。 一、图形验证码的原理 随机生成与临时存储:系统会随机生成一个验证码,并将其临时保存…

论文阅读:EasySplat: View-Adaptive Learning makes 3D Gaussian Splatting Easy

省流: 视图自适应分组策略,利用强大的点图先验构建成对点图,从而实现了点云和相机姿态的精确初始化。基于KNN的自适应致密化策略,该策略根据每个高斯的相邻椭球体的形状差异动态触发致密化,从而实现了鲁棒的新视图合成…

Vue2+OpenLayers添加/删除点、点击事件功能实现(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、代码实现 4.1、添加一个点 4.2、删除所有点 4.3、根据经纬度删除点 4.4、给点添加点击事件 4.5、完整代码 五、Gitee源码 一、案例截图 可以新增/删除标记点,点击标记点可以获取到当前标…

(三)c#中const、static、readonly的区别

在 C# 中,const、static 和 readonly 都是用来定义不可变的值,但它们有一些关键的区别。让我们详细比较一下这三者的用途和特点: 1. const(常量) 编译时常量:const 用于声明常量,其值必须在编…