学习笔记(26):线性代数-张量的降维求和,简单示例
学习笔记(26):线性代数-张量的降维求和,简单示例
1.先理解 “轴(Axis)” 的含义
张量的 “轴” 可以理解为 维度的方向索引 。对于形状为 (2, 3, 4)
的张量,3 个轴的含义是:
- 轴 0(axis=0):最外层维度,控制 “块” 的数量,长度为 2(即有 2 个 “子张量” 叠在这个维度上 )。
- 轴 1(axis=1):中间维度,控制每个 “块” 里 “行” 的数量,长度为 3(每个子张量有 3 行 )。
- 轴 2(axis=2):最内层维度,控制每行里 “列” 的数量,长度为 4(每行有 4 列 )。
可以类比成 “2 摞书,每摞有 3 页,每页有 4 个字”,3 个轴对应 “摞 → 页 → 字” 的层级。
2. 求和操作的本质:“压缩” 目标轴
求和(sum
)的核心逻辑是 对目标轴上的所有元素做聚合(相加),这会让该轴的 “长度坍缩为 1”,最终在形状里直接 “去掉该轴” 。
本质上,“轴” 只是维度的索引,求和操作通过 压缩目标轴的长度 改变形状,这是张量维度操作的基础逻辑,也和 “广播(Broadcasting)”、“降维(Reduce)” 等操作的原理相通。
一、降维概念
沿轴求和属于降维操作,核心是通过 “压缩一个维度” 减少张量的维度数量或某一维度的长度,概念结合的角度解释:
1.1、从维度数量看降维
原始张量X
是3 维(形状(2, 3, 4)
),沿任意轴求和后:
- 沿轴 0 求和,结果是2 维(形状
(3, 4)
) - 沿轴 1 求和,结果是2 维(形状
(2, 4)
) - 沿轴 2 求和,结果是2 维(形状
(2, 3)
)
直观体现:3 维→2 维,维度数量减少了 1,这是典型的降维(从更高维数变为更低维数 )。
1.2、从维度长度看 “局部降维”
即使维度数量没变(比如 4 维张量沿中间轴求和),某一维度的长度会 “坍缩”:
假设张量形状是(2, 3, 4, 5)
,沿轴 1 求和后:
- 原轴 1 长度是 3,求和后该轴长度消失(形状变为
(2, 4, 5)
) - 整体维度数量从 4→3,也是降维;若从 “维度长度组合” 看,轴 1 的长度被压缩掉,相当于该维度的 “信息被聚合”,也属于降维的一种表现(压缩特定维度,减少数据在该维度的分布 )。
1.3、降维的本质:信息聚合
沿轴求和时,把该轴上多个元素的信息聚合为 1 个(通过相加),导致该轴 “失去独立存在的意义”:
- 原始轴 0 有 2 个子张量(2 条独立信息 ),求和后合并成 1 组,这 2 条信息被聚合了→轴 0 被 “降维”
- 可以类比:把多本 “书”(轴 0 的子张量 )的内容按页、按行相加,相当于 “减少了书的数量” 这个维度的独立性。
1.4、和其他降维操作的对比
除了sum
,常见的降维操作还有:
mean
(沿轴求平均 ):同样压缩轴,维度数量 / 长度减少max
/min
(沿轴取最大 / 最小 ):也是聚合信息,降维flatten
(展平 ):直接把高维张量压成 1 维,是更极端的降维
而sum
的特殊点在于通过加法聚合信息,本质上和这些操作一样,都是让张量的维度变少 / 某维度长度缩短,所以属于降维。
简单说:只要操作后,张量的维度数量减少,或者某一维度的长度从N>1
变成1
(甚至消失 ),都属于降维,沿轴求和完美符合这个特征,所以是降维操作。
二、示例:一个具有形状(2,3,4)的张量,在轴0、1、2上的求和输出是什么形状?
2.1、代码示例
import torch# 创建一个形状为 (2, 3, 4) 的张量,每个元素是 1 到 24 的整数
X = torch.arange(1, 25).reshape(2, 3, 4)
print("原始张量 X 的形状:", X.shape)
print("X 的内容:\n", X)# 沿轴 0 求和(压缩轴 0)
sum_axis0 = X.sum(axis=0)
print("\n沿轴 0 求和后的形状:", sum_axis0.shape)
print("沿轴 0 求和后的结果:\n", sum_axis0)# 沿轴 1 求和(压缩轴 1)
sum_axis1 = X.sum(axis=1)
print("\n沿轴 1 求和后的形状:", sum_axis1.shape)
print("沿轴 1 求和后的结果:\n", sum_axis1)# 沿轴 2 求和(压缩轴 2)
sum_axis2 = X.sum(axis=2)
print("\n沿轴 2 求和后的形状:", sum_axis2.shape)
print("沿轴 2 求和后的结果:\n", sum_axis2)
2.2、输出结果与解释
2.2.1. 原始张量 X
原始张量 X 的形状: torch.Size([2, 3, 4])
X 的内容: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]]])
- 形状解读:
- 轴 0(长度 2):2 个 “子张量”(用外层中括号分隔)。
- 轴 1(长度 3):每个子张量有 3 行。
- 轴 2(长度 4):每行有 4 列。
2.2.2. 沿轴 0 求和(axis=0
)
沿轴 0 求和后的形状: torch.Size([3, 4])
沿轴 0 求和后的结果:tensor([[14, 16, 18, 20],[22, 24, 26, 28],[30, 32, 34, 36]])
- 操作逻辑:
将轴 0 的 2 个子张量 对应位置相加(例如X[0,0,0] + X[1,0,0] = 1+13=14
)。 - 形状变化:
轴 0(长度 2)被压缩,结果形状变为(3, 4)
。
2.2.3. 沿轴 1 求和(axis=1
)
沿轴 1 求和后的形状: torch.Size([2, 4])
沿轴 1 求和后的结果:tensor([[15, 18, 21, 24],[51, 54, 57, 60]])
- 操作逻辑:
对每个子张量的 3 行分别求和(例如第一行[1,2,3,4]
与第二行[5,6,7,8]
、第三行[9,10,11,12]
按列相加,得到[15,18,21,24]
)。 - 形状变化:
轴 1(长度 3)被压缩,结果形状变为(2, 4)
。
2.2.4. 沿轴 2 求和(axis=2
)
沿轴 2 求和后的形状: torch.Size([2, 3])
沿轴 2 求和后的结果:tensor([[10, 26, 42],[58, 74, 90]])
- 操作逻辑:
对每行的 4 个元素分别求和(例如X[0,0] = [1,2,3,4]
求和得 10,X[0,1] = [5,6,7,8]
求和得 26)。 - 形状变化:
轴 2(长度 4)被压缩,结果形状变为(2, 3)
。
2.3、可视化理解
用表格形式更直观地展示求和过程:
2.3.1、原始张量 X
子张量 0:
┌───────┬───────┬───────┬───────┐
│ 1 │ 2 │ 3 │ 4 │
├───────┼───────┼───────┼───────┤
│ 5 │ 6 │ 7 │ 8 │
├───────┼───────┼───────┼───────┤
│ 9 │ 10 │ 11 │ 12 │
└───────┴───────┴───────┴───────┘子张量 1:
┌───────┬───────┬───────┬───────┐
│ 13 │ 14 │ 15 │ 16 │
├───────┼───────┼───────┼───────┤
│ 17 │ 18 │ 19 │ 20 │
├───────┼───────┼───────┼───────┤
│ 21 │ 22 │ 23 │ 24 │
└───────┴───────┴───────┴───────┘
2.3.2、沿轴 0 求和(压缩子张量)
结果:
┌───────┬───────┬───────┬───────┐
│ 1+13 │ 2+14 │ 3+15 │ 4+16 │
├───────┼───────┼───────┼───────┤
│ 5+17 │ 6+18 │ 7+19 │ 8+20 │
├───────┼───────┼───────┼───────┤
│ 9+21 │ 10+22 │ 11+23 │ 12+24 │
└───────┴───────┴───────┴───────┘
2.3.3、沿轴 1 求和(压缩行)
子张量 0 结果:
┌───────────────────┐
│ 1+5+9 │ 2+6+10 │
├───────────────────┤
│ 3+7+11│ 4+8+12 │
└───────────────────┘子张量 1 结果:
┌───────────────────┐
│ 13+17+21 │ 14+18+22 │
├───────────────────┤
│ 15+19+23 │ 16+20+24 │
└───────────────────┘
2.3.4、沿轴 2 求和(压缩列)
子张量 0 结果:
┌───────────┐
│ 1+2+3+4 │
├───────────┤
│ 5+6+7+8 │
├───────────┤
│ 9+10+11+12│
└───────────┘子张量 1 结果:
┌──────────────┐
│ 13+14+15+16 │
├──────────────┤
│ 17+18+19+20 │
├──────────────┤
│ 21+22+23+24 │
└──────────────┘
- 沿轴
k
求和:将该轴上的所有元素相加,导致该轴的长度 从N
坍缩为 1,最终形状中 去掉轴k
。
相关文章:
学习笔记(26):线性代数-张量的降维求和,简单示例
学习笔记(26):线性代数-张量的降维求和,简单示例 1.先理解 “轴(Axis)” 的含义 张量的 “轴” 可以理解为 维度的方向索引 。对于形状为 (2, 3, 4) 的张量,3 个轴的含义是: 轴 0(axis0&…...

以智能管理为基础,楼宇自控打造建筑碳中和新路径
在全球气候变化的严峻形势下,“碳中和”已成为各国发展的重要战略目标。建筑行业作为能源消耗与碳排放的“大户”,其运行阶段的能耗占全社会总能耗近40%,碳排放占比与之相当,实现建筑碳中和迫在眉睫。传统建筑管理模式下ÿ…...
81 实战一:给root目录扩容
添加一块100G硬盘 vgextend centos /dev/sdb1 /dev/sdc lvextend -L +120G /dev/centos/root xfs_growfs /dev/centos/root df -h 看是否扩容成功 82 实战二:给swap空间扩容 添加一块20G硬盘 fdisk -l 可以看到新添加的硬盘 vgextend centos /dev/sdd …...
1130 - Host ‘xxx.x.xx.xxx‘is not allowed to connect to this MySQL server
以下为本次问题的解决办法: 1、暂停mysql容器: docker stop mysql 2、删除mysql容器:docker rm mysql 3、查看mysql容器是否被删除:docker ps -a #没有mysql容器就是删除成功 4、run mysql容器: docker run -d --…...
HttpURLConnection实现
我有一个接口 http://ip:port/Others/airportnew/,采用post方法调用,采用body方式传值,其body内容为{"data": {"data": {"image": ""}} },现在我需要在java中调用这个接口,帮…...

day029-Shell自动化编程-计算与while循环
文章目录 1. read 交互式初始化变量1.1 案例-安装不同的软件1.2 案例-比较大小 2. 计算2.1 bc2.2 awk2.3 expr2.4 let2.5 案例-计算内存的空闲率2.6 案例-检查域名过期时间和https整数过期时间 3. 循环3.1 循环控制语句3.2 for循环-c语言格式3.3 while循环3.3.1 案例-猜数字3.3…...

Linux命令基础(2)
su和exit命令 可以通过su命令切换到root账户 语法:su [-] 用户名 -符号是可选的,表示是否在切换用户后加载环境变量,建议带上 参数:用户名,表示要切换的用户,用户名可以省略,省略表示切换到ro…...

vue3 + vite实现动态路由,并进行vuex持久化设计
在后台管理系统中,如何根据后端返回的接口,来动态的设计路由呢,今天一片文章带你们解 1、在vuex中设置一个方法 拿到完整的路由数据 const state {routerList: []}; const mutations { dynameicMenu(state, payload) {// 第一步 通过glob…...
ThingsCloud事物云平台搭建-微信小程序
ThingsCloud云平台与微信小程序设计 本文主要是介绍ThingsCloud云平台的搭建及微信小程序与app的使用。 当前文章是作为一个通用案例,介绍如何快速使用 ThingsCloud云平台 以及 利用 ThingsCloud云平台平台的框架快速设计手机APP和微信小程序。 可以快速让硬件接入,实现硬件…...
为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
🧩 一、为什么 uni-app 开发的 App 没有明显出现屏幕适配问题? ✅ 1. uni-app 是基于 H5 的运行环境(或类 H5) uni-app 默认使用的是 H5 的渲染引擎(如 WebView 或小程序渲染引擎)。在 H5 中,…...

学习路之php--性能优化
一、php周边优化 二、代码级优化 变量管理 及时unset()释放大数组/对象,减少内存占用局部变量访问速度比全局变量快约2倍,优先使用局部变量大数组采用引用传递(&$var)避免内存 循环优化 预计算循环次数: …...

GC1808:高性能24位立体声音频ADC芯片解析
1. 芯片简介 GC1808 是一款24位立体声音频模数转换器(ADC),支持96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于家庭影院、蓝牙音箱等场景。 核心特性 高精度:24位分辨率,…...

echarts使用graph、lines实现拓扑,可以拖动增加effect效果
options.js // import React from react // import * as echarts from echartsimport ./index.lessexport const useEchartsOptionFun ({ nodeDataList, getNodeLinksDataList, getLinesCoordsFun }) > {const option {title: {text: 拓扑关系图,top: top,left: center,}…...

产品经理课程(九)
从需求到功能设计 (一)复习 产品规划:产品定位、阶段性计划 产品定位:产品画布(9个步骤;最重要的是先解决什么问题) (Roadmap)目标要素:时间、事项、里程碑…...
二.单例模式
一.单例模式的定义 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供该实例的全局访问点。 1.1.核心目标 唯一实例:限制类的实例化次数仅一次。全局访问:提供统一的访问入口(通常是静…...

从零开始开发纯血鸿蒙应用之网络检测
从零开始开发纯血鸿蒙应用 〇、前言一、认识 connection 模块1、获取默认网络2、获取网络能力信息3、解析网络能力信息3.1、NetCap3.2、NetBearType 二、实现网络检测功能1、申请权限2、获取默认网路的 NetCap 数组 三、总结 〇、前言 在之前的博文里,介绍了如何实…...

向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘
作者:来自腾讯云刘忠奇 2025 年 1 月,腾讯云 ES 团队上线了 Elasticsearch 8.16.1 AI 搜索增强版,此发布版本重点提升了向量搜索、混合搜索的能力,为 RAG 类的 AI Search 场景保驾护航。除了紧跟 ES 官方在向量搜索上的大幅优化动…...
接IT方案编写(PPT/WORD)、业务架构设计、投标任务
1、IT 方案编写(PPT/WORD) 定制化方案:根据客户需求,提供涵盖云计算、大数据、人工智能等前沿技术领域的 PPT/WORD 方案编写服务,精准提炼核心价值,呈现专业技术内容。 逻辑清晰架构:采用…...
PostgreSQL 的扩展pageinspect
PostgreSQL 的扩展pageinspect pageinspect 是 PostgreSQL 提供的一个强大的底层扩展,允许数据库管理员和开发者直接检查数据库页面的内部结构。这个扩展对于数据库调试、性能优化和深入学习 PostgreSQL 存储机制非常有价值。 一、扩展概述 功能:提供…...
Unity——QFramework框架 内置工具
QFramework 除了提供了一套架构之外,QFramework 还提供了可以脱离架构使用的工具 TypeEventSystem、EasyEvent、BindableProperty、IOCContainer。 这些工具并不是有意提供,而是 QFramework 的架构在设计之初是通过这几个工具组合使用而成的。 内置工具…...

【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
在主机A pycharm如何连接远程主机B win docker? 需要win docker配置什么? 快捷配置-主机B win OpenSSH SSH Server https://blog.csdn.net/z164470/article/details/121683333 winR,打开命令行,输入net start sshd,启动SSH。 或者右击我的电脑&#…...

股指期货波动一个点多少钱?
很多朋友在交易股指期货时,都会好奇一个问题:股指期货波动一个点,我的账户里到底是赚了还是亏了多少钱?要搞清楚这个问题,其实很简单,只需要了解两个关键信息:股指期货的“交易单位”࿰…...
Kafka 快速上手:安装部署与 HelloWorld 实践(一)
一、Kafka 是什么?为什么要学? ** 在大数据和分布式系统的领域中,Kafka 是一个如雷贯耳的名字。Kafka 是一种分布式的、基于发布 / 订阅的消息系统,由 LinkedIn 公司开发,后成为 Apache 基金会的顶级开源项目 。它以…...
NGINX `ngx_stream_core_module` 模块概览
一、模块定位与功能 通用 TCP/UDP 代理 支持同时处理 TCP 和 UDP 流量,透明转发请求到后端服务器组(upstream)。可作为四层负载均衡,根据客户端 IP、权重、最少连接等策略将连接分发给后端。 预读(preread)…...

iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform
Kotlin Multiplatform(简称 KMP)是 JetBrains 推出的开源跨平台开发框架 Kuikly 是腾讯开源的跨端开发框架,基于 Kotlin Multiplatform 技术构建,为开发者提供了技术栈更统一的跨端开发体验 KMP 不仅局限于移动端,它…...

探索C++标准模板库(STL):String接口的底层实现(下篇)
前引:在C的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”&am…...

Flutter知识点汇总
Flutter架构解析 1. Flutter 是什么?它与其他移动开发框架有什么不同? Flutter 是 Google 开发的开源移动应用开发框架,可用于快速构建高性能、高保真的移动应用(iOS 和 Android),也支持 Web、桌面和嵌入式设备。。它与其他移动开发框架(如 React Native、Xamarin、原…...
vue组件的data为什么是函数?
vue组件的data为什么是函数? 在JS中,实例是通过构造函数创建的,每个构造函数可以new出多个实例,每个实例都会继承原型上的方法和属性。 在vue中,一个vue组件就是一个实例,当一个组件被复用多次࿰…...
AI图片售卖:是暴利新风口还是虚幻泡沫?哪些平台适合售卖AI图片
还记得去年大火的Midjourney吗?今年4月,Midjourney又发布了备受期待的V7版本,带来了更高的图像质量和创新功能。使用Midjourney、Stable Diffusion、DALLE等AI图片生成工具,创作者只需输入关键词即可获得高质量的原创图片。这一变…...

线性注意力 vs. 传统注意力:效率与表达的博弈新解
核心结论:线性注意力用计算复杂度降维换取全局建模能力,通过核函数和结构优化补足表达缺陷 一、本质差异:两种注意力如何工作? 特性传统注意力(Softmax Attention)线性注意力(Linear At…...