3x4x5的张量:

x = torch.tensor([[[1, 2, 3, 4, 5],
                   [6, 7, 8, 9, 10],
                   [11, 12, 13, 14, 15],
                   [16, 17, 18, 19, 20]],
                  
                  [[21, 22, 23, 24, 25],
                   [26, 27, 28, 29, 30],
                   [31, 32, 33, 34, 35],
                   [36, 37, 38, 39, 40]],
                  
                  [[41, 42, 43, 44, 45],
                   [46, 47, 48, 49, 50],
                   [51, 52, 53, 54, 55],
                   [56, 57, 58, 59, 60]]])

dim=0:代表3个元素的维度,每个元素是一个4x5的矩阵。
dim=1:代表4个元素的维度,每个元素是一个5维的向量。
dim=2:代表5个元素的维度,每个元素是一个标量。

 3 维 tensor 的sun操作理解

参考Pytorch从入门到实践:dim维度的使用(终极版)_pytorch tensor dim-CSDN博客

3 个括号代表的维度从左往右分别为 0, 1, 2,在第 0 维遍历得到矩阵,在第 1 维遍历得到向量,在第 2 维遍历得到标量

 更详细一点

所以,我们明白了:标量,向量,矩阵, 三维张量之间的关系,三维张量里面包含了二维的矩阵,二维矩阵里面包含了一维的向量,一维向量里面包含了零维的标量。

b = torch.tensor([[[3, 2], [1, 4]], [[5, 6], [7, 8]]])
print(b)tensor([[[3, 2],[1, 4]],[[5, 6],[7, 8]]])

将 b 在第 0 维相加,第 0 维为最外层括号,最外层括号中的元素为矩阵[[3, 2], [1, 4]]和[[5, 6], [7, 8]]。在第 0 维求和,就是将第 0 维中的元素(矩阵)相加

s = torch.sum(b, dim=0)
print(s)
tensor([[ 8,  8],[ 8, 12]])

 求 b 在第 1 维的和,就是将 b 第 1 维中的元素[3, 2]和[1, 4], [5, 6]和 [7, 8]相加,所以

 [3,2]+[1,4]=[4,6],[5,6]+[7,8]=[12,14]

s = torch.sum(b, dim=1)
print(s)
tensor([[ 4,  6],[12, 14]])

则在 b 的第 2 维求和,就是对标量 3 和 2, 1 和 4, 5 和 6 , 7 和 8 求和

s = torch.sum(b, dim=2)
print(s)
tensor([[ 5,  5],[11, 15]])

如果想要保持结果的维度不变,设置参数keepdim=True即可。

各阶张量


0阶张量(标量):

0阶张量是一个单独的数字或数值,没有维度。
示例:x = 5
1阶张量(向量):

1阶张量是有序的一维数组,具有一个维度。
示例:x = [1, 2, 3, 4]
在PyTorch中,形状表示为:(4,)
2阶张量(矩阵):

2阶张量是一个二维数组,具有两个维度:行和列。
示例:x = [[1, 2], [3, 4]]
在PyTorch中,形状表示为:(2, 2)
3阶张量(三维数组):

3阶张量是一个具有三个维度的数组,例如图片数据,其中维度可以理解为高度、宽度和通道数。
示例:x = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
在PyTorch中,形状表示为:(2, 2, 2)

dim

一些常见操作

import torch
x = torch.tensor([[0, 1, 2], [3, 4, 5]])  # shape (2, 3)
# 沿行(纵向)压缩 → 每列求和
x.sum(dim=0)  # tensor([3, 5, 7])  shape (3,)
# 沿列(横向)压缩 → 每行求和
x.sum(dim=1)  # tensor([3, 12])    shape (2,)y = torch.tensor([[[1,2],[3,4]], [[5,6],[7,8]]])  # shape (2, 2, 2)
# 沿最外层维度压缩 → 同位置元素取最大值
y.max(dim=0)  
# values: tensor([[5,6], [7,8]]), indices: tensor([[1,1], [1,1]])
# 沿中间维度压缩 → 每行取最大值
y.max(dim=1)  
# values: tensor([[3,4], [7,8]]), indices: tensor([[1,1], [1,1]])x = torch.tensor([[1, 2], [3, 4]])  # (2, 2)
y = torch.tensor([[5, 6]])           # (1, 2)
# 沿行(dim=0)拼接 → 新增行
torch.cat([x, y], dim=0)  
# tensor([[1, 2],
#         [3, 4],
#         [5, 6]])  shape (3, 2)
# 错误示例:列数不匹配时 dim=0 会报错!
z = torch.tensor([[7], [8]])  
torch.cat([x, z], dim=1)  # 正确:沿列拼接 → 新增列t = torch.arange(10).reshape(5, 2)  # (5, 2)
# 沿行(dim=0)切分为 2 行和 3 行
parts = t.split([2, 3], dim=0)  
# part1: shape (2, 2), part2: shape (3, 2)x = torch.zeros(3, 1, 2)  # (3, 1, 2)
x.squeeze(dim=1)  # 移除 dim=1 → (3, 2)
x.unsqueeze(dim=0)  # 在 dim=0 添加维度 → (1, 3, 1, 2)x = torch.randn(2, 3, 5)  # (2, 3, 5)
x.permute(2, 0, 1)        # 重排为 (5, 2, 3)

mean操作

import torch
x = torch.arange(24).view(2, 3, 4).float()  # 形状 (2, 3, 4)
"""
x 内容:
[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.]],[[12., 13., 14., 15.],[16., 17., 18., 19.],[20., 21., 22., 23.]]]
"""

不同维度的均值计算​:

操作计算逻辑输出形状结果
x.mean(dim=0)沿通道(第0维)求平均(3, 4)[[6., 7., 8., 9.], [10., 11., 12., 13.], [14., 15., 16., 17.]]
x.mean(dim=1)沿宽度(第1维)求平均(2, 4)[[4., 5., 6., 7.], [16., 17., 18., 19.]]
x.mean(dim=2)沿高度(第2维)求平均(2, 3)[[1.5, 5.5, 9.5], [13.5, 17.5, 21.5]]
x.mean(dim=[1,2])沿宽度和高度同时求平均(2,)[5.5, 17.5]

dim=-2 的操作效果(三维张量等价于 dim=1):


将中间维度(大小为3)压缩为1,结果形状变为 (2, 1, 4) → 实际输出 (2, 4)(因默认压缩空维度),dim=k 表示沿维度 k 压缩(该维度消失),

例如:

原始张量:  [3,3,4]  ->  [3,4]
[[[ 0,  1,  2,  3],    # 第1个矩阵
  [ 4,  5,  6,  7],
  [ 8,  9, 10, 11]],

 [[12, 13, 14, 15],    # 第2个矩阵
  [16, 17, 18, 19],
  [20, 21, 22, 23]]]

沿 dim=-2 求和后:  
[[ 12, 15, 18, 21],    # 0+4+8, 1+5+9, ...  
 [48, 51, 54, 57]]     # 12+16+20, 13+17+21, ...

 

实际计算示例

假设场景:


transport = incident_lights * incident_areas * n_d_i  # 逐元素相乘:
# 结果维度:(num_pts, num_sample, 3)

#   incident_lights: (num_pts, num_sample, 3)
#   incident_areas:   (num_pts, num_sample, 1)
#   n_d_i:          (num_pts, num_sample, 1)

  • num_pts=1(1个表面点)
  • num_sample=2(2个采样方向)
  • 数据:
    incident_lights = [[[1.0, 0.5, 0.2], [0.8, 0.3, 0.1]]]  # (1,2,3)
    incident_areas = [[0.6], [0.6]]                         #  (1,2,1)
    n_d_i         = [[[0.9], [0.7]]]                       # (1,2,1)

分步计算:

# 第一步:逐元素相乘
term1 = incident_lights * incident_areas # [[[1.0 * 0.6, 0.5 * 0.6, 0.2 * 0.6] = [0.6, 0.3, 0.12]# [0.8 * 0.6, 0.3 * 0.6, 0.1 * 0.6] = [0.48, 0.18, 0.06]]]
term2 = term1 * n_d_i    # [[[0.6 * 0.9, 0.3 * 0.9, 0.12 * 0.9] = [0.54, 0.27, 0.108]# [0.48 * 0.7, 0.18 * 0.7, 0.06 * 0.7] = [0.336, 0.126, 0.042]]]# 第二步:沿采样维度(dim=-2)求平均
diffuse_light = term2.mean(dim=-2) # [(0.54+0.336)/2, (0.27+0.126)/2, (0.108+0.042)/2]# = [0.438, 0.198, 0.075]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88549.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88549.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88549.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧菜场系统(源码+文档+讲解+演示)

引言 在数字化浪潮的推动下,传统菜市场也在寻求创新与变革。智慧菜场系统作为一种新型的菜市场管理工具,通过数字化手段优化菜市场的全流程,提高运营效率,增强消费者体验,提升市场管理质量。本文将详细介绍智慧菜场系统…

【GESP】C++一级真题 luogu-B4355 [GESP202506 一级] 值日

GESP C一级,2025年6月真题,基础运算和循环语句,难度★☆☆☆☆。 题目题解详见:【GESP】C一级真题 luogu-B4355 [GESP202506 一级] 值日 | OneCoder 【GESP】C一级真题 luogu-B4355 [GESP202506 一级] 值日 | OneCoderGESP C一级…

【Linux应用】Ubuntu20.04 aarch64开发板一键安装ROS2(清华源)

【Linux应用】Ubuntu20.04 aarch64开发板一键安装ROS2(清华源) 文章目录相关资料更改UTF8执行更新一键安装ROS2验证配置环境变量附录:开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RAD…

【HDLBits习题 2】Circuit - Sequential Logic(4)More Circuits

1. Rule90&#xff08;Rule 90&#xff09;方法1&#xff1a;module top_module (output reg [511:0] q,input clk,input load,input [511:0] data ); integer i;always (posedge clk) beginif (load 1b1) beginq < data;end else beginfor (i0; i<$bits(q);…

基于mysqlfrm工具解析mysql数据结构文件frm表结构和数据库版本信息

这里使用Linux系统上操作。win上搞了下 python报错。所以在这里记录一下推荐大家使用linux系统操作。 安装mysql utilswget https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5.tar.gztar -xf mysql-utilities-1.6.5.tar.gzcd mysql-utilities-1.6.5py…

【C++ 深入解析 C++ 模板中的「依赖类型」】

深入解析 C 模板中的「依赖类型」 依赖类型是 C 模板编程中的核心概念&#xff0c;特指那些依赖于模板参数的类型。迭代器是依赖类型的常见例子&#xff0c;但远不止于此。让我们全面解析这个重要概念&#xff1a; 依赖类型的本质定义 依赖类型是&#xff1a; 在模板中定义直接…

Telnet远程连接实验(Cisco)

Telnet远程连接实验&#xff08;Cisco&#xff09; 拓扑图一并实现DHCP服务、HTTP服务、FTP服务。 二层交换机配置&#xff1a; 交换机Switch0配置&#xff1a; vlan 10vlan 20int f0/1switchport mode accessswitchport access vlan 10int f0/2switchport mode accessswitchpo…

C++:非类型模板参数,模板特化以及模板的分离编译

目录 一、前言 二、非类型模板参数 三、模板的特化 3.1 类模板特化 3.11 全特化 3.12 偏特化 3.2 函数模板特化 3.3 注意 四、模板的分离编译 一、前言 前面的文章梳理了模板初阶的一些用法&#xff0c;在后面梳理了STL的一些容器的用法后&#xff0c;下面将用到含有S…

【Qt 学习之路】Qt Android开发环境搭建:Ubuntu的Vmware虚拟机中的踩坑实录

文章目录1、简介2、虚拟机内USB设备识别难题2.1、正确连接手机2.2、打开USB相关配置2.3、打开虚拟机中的手机设备3、Gradle下载速度缓慢之困3.1、下载 Gradle 镜像3.2、安放镜像位置3.3、修改项目中的gradle路径1、简介 许久未曾使用Qt进行Android开发&#xff0c;今日在Ubunt…

MySQL中使用group_concat遇到的问题及解决

在使用group_concat的过程中遇到个问题&#xff0c;这里记录一下&#xff1a;在MySQL中有个配置参数group_concat_max_len&#xff0c;它会限制使用group_concat返回的最大字符串长度&#xff0c;默认是1024。 查询group_concat_max_len大小&#xff1a; show variables like…

高性能小型爬虫语言与代码示例

高性能小型爬虫现在有哪几种新兴语言可以选择。我看到了很多关于爬虫框架的信息&#xff0c;特别是使用Go语言和Node.js的框架。Go语言方面有Kaola1和Katana2这两个框架。Kaola被描述为高性能的Go语言爬虫框架&#xff0c;轻量级且强大&#xff0c;提供灵活配置选项。 Node.js…

【PTA数据结构 | C语言版】在顺序表 list 中查找元素 x

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个整数存入顺序表&#xff0c;对任一给定整数 x&#xff0c;查找其在顺序表中的位置。 输入格式&#xff1a; 输入首先在第一行给出正整数 n&#xff08;≤10^4 &#…

claude code-- 基于Claude 4 模型的智能编程工具,重塑你的编程体验

文章目录0.前言1.安装nodejs2.使用指南3.快速上手4.总结0.前言 最近的这个claudecode非常的火&#xff0c;因为可能是这个cursoe定价的一些原因吧&#xff0c;我是听其他的这个大佬说的&#xff0c;因为这个cursor其实我就是最开始的使用用过一下&#xff0c;现在基本上不使用…

HTTP API 身份认证

互联网系统通常需要根据用户身份决定是否有资源的访问权限&#xff0c;这就需要对用户进行身份认证&#xff08;Authentication&#xff09;&#xff0c;验证用户所声称的身份。验证手段通常是验证只有用户知道或拥有的东西&#xff0c;比如密码、手机号、指纹等。 基于浏览器…

Python毕业设计232—基于python+Django+vue的图书管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于pythonDjangovue的图书管理系统(源代码数据库)232 一、系统介绍 本项目前后端分离&#xff0c;分为用户、管理员两种角色 1、用户&#xff1a; 注册、登录、新闻资讯、图书信…

Koa+Puppeteer爬虫教程页面设计

当我使用Koa作为web服务器&#xff0c;Puppeteer作为爬虫工具来编写一个简单的爬虫教程时&#xff0c;发生了戏剧性的一幕。 下面我将创建一个完整的Koa Puppeteer爬虫教程页面&#xff0c;包含代码示例、执行演示和详细说明。设计思路 左侧为教程内容区域右侧为实时爬虫演示区…

云成本优化完整指南:从理论到实践的全方位解决方案

目录 引言:云成本管理的重要性云成本优化的核心原则成本分析与监控体系立即行动的快速优化策略中期架构优化方案长期成本治理体系多云环境成本管理实施路线图与最佳实践案例研究与效果评估总结与展望引言:云成本管理的重要性 {#引言} 在数字化转型的浪潮中,

计算机学科专业基础综合(408)四门核心课程的知识点总结

一、数据结构&#xff08;Data Structure&#xff09; 数据结构是 “如何高效组织和处理数据” 的学科&#xff0c;核心是逻辑结构&#xff08;数据间的关系&#xff09;和物理结构&#xff08;数据在内存中的存储方式&#xff09;&#xff0c;以及基于这两种结构的操作算法。 …

JVM GC长暂停问题排查

JVM GC长暂停问题排查 现象 名词&#xff1a;GC 垃圾回收&#xff08;Garbage Collection&#xff09;分类 计算机科学 在高并发下&#xff0c;Java程序的GC问题属于很典型的一类问题&#xff0c;带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」&#x…

前端开发中的难题及解决方案

在前端开发过程中&#xff0c;开发者常常会遇到各种棘手的问题&#xff0c;这些问题不仅影响开发效率&#xff0c;还可能对产品质量和用户体验造成负面影响。下面详细探讨常见难题及有效解决方案。一、跨浏览器兼容性问题难题表现&#xff1a;不同浏览器&#xff08;如 Chrome、…