当前位置: 首页 > news >正文

PyTorch 中张量运算广播

TLDR

右对齐,空补一,从左往右依维运算
[m] + [x, y] = [m +x, m + y]

正文

以如下 a b 两个 tensor 计算为例

a = torch.tensor([[1],[2],[3],
])
b = torch.tensor([[[1, 2, 3],],[[4, 5, 6],],[[7, 8, 9],],
])
# a.shape = (3, 1)
# b.shape = (3, 1, 3)

首先将两个 tensor 的 shape 右对齐
a( , 3, 1)
b(3, 1, 3)

判断两个 tensor 是否满足广播规则

  • tensor 至少有一个维度(比如 torch.tensor((0,)) 便不符合本要求)
  • 检查上一步对齐的 tensor shape,要求两个 tensor 对应维度的大小:要么相同;要么其中一个为 1;要么其中一个为空
  • 如果满足上述规则,则继续,否则报错

将对齐后空缺的维度设置为 1
a(1, 3, 1)
b(3, 1, 3)
其实就是对 a 进行了扩维,此时两个 tensor 为:

a = torch.tensor([[[1],[2],[3],],
])
b = torch.tensor([[[1, 2, 3],],[[4, 5, 6],],[[7, 8, 9],],
])
# a.shape = (1, 3, 1)
# b.shape = (3, 1, 3)

从左往右对两个 tensor 的每一个维度进行运算,按照以下规则

  • 如果大小相同,则直接进行运算即可(一一对应)
  • 如果其中一个大小为 1,则使用这个元素与另一个 tensor 当前维度下的每个元素进行运算(本质是一个递归操作)

例如计算 a + b (这两个 tensor 已经经过上述步骤处理,即维度已经相同)

# 1. 因为 a.shape[0] == 1,所以将 a[0] 分别与 b[0]、b[1]、b[2] 相加
[a[0] + b[0],a[0] + b[1],a[0] + b[2],
]# 2. 接下来继续往后计算,以 a[0] + b[0] 为例
#    因为 a[0].shape[0] = 3, b[0].shape[0] = 1,
#    所以将 b[0][0] 分别与 a[0][0]、a[0][1]、a[0][2] 相加
[[	# a[0] + b[0]a[0][0] + b[0][0],a[0][1] + b[0][0],a[0][2] + b[0][0],],[	# a[0] + b[1]a[0][0] + b[1][0],a[0][1] + b[1][0],a[0][2] + b[1][0],],[	# a[0] + b[2]a[0][0] + b[2][0],a[0][1] + b[2][0],a[0][2] + b[2][0],],
]# 3. 继续往后计算,以 a[0][0] + b[0][0] 为例
#    因为 a[0][0].shape[0] == 1,
#    所以将 a[0][0][0] 分别与 b[0][0][0]、b[0][0][1]、b[0][0][2] 相加
[[	# a[0] + b[0][ 	# a[0][0] + b[0][0]a[0][0][0] + b[0][0][0],a[0][0][0] + b[0][0][1],a[0][0][0] + b[0][0][2],],[ 	# a[0][1] + b[0][0]a[0][1][0] + b[0][0][0],a[0][1][0] + b[0][0][1],a[0][1][0] + b[0][0][2],],[ 	# a[0][2] + b[0][0]a[0][2][0] + b[0][0][0],a[0][2][0] + b[0][0][1],a[0][2][0] + b[0][0][2],],],[	# a[0] + b[1][ 	# a[0][0] + b[1][0]a[0][0][0] + b[1][0][0],a[0][0][0] + b[1][0][1],a[0][0][0] + b[1][0][2],],[ 	# a[0][1] + b[1][0]a[0][1][0] + b[1][0][0],a[0][1][0] + b[1][0][1],a[0][1][0] + b[1][0][2],],[ 	# a[0][2] + b[1][0]a[0][2][0] + b[1][0][0],a[0][2][0] + b[1][0][1],a[0][2][0] + b[1][0][2],],],[	# a[0] + b[2][ 	# a[0][0] + b[2][0]a[0][0][0] + b[2][0][0],a[0][0][0] + b[2][0][1],a[0][0][0] + b[2][0][2],],[ 	# a[0][1] + b[2][0]a[0][1][0] + b[2][0][0],a[0][1][0] + b[2][0][1],a[0][1][0] + b[2][0][2],],[ 	# a[0][2] + b[2][0]a[0][2][0] + b[2][0][0],a[0][2][0] + b[2][0][1],a[0][2][0] + b[2][0][2],],],
]

总结

右对齐空补一,从左往右依维递归)运算。
一个 tensor 的某个维度大小为 1 时的计算规则:[1] + [2, 3, 4] = [1 + 2, 1 + 3, 1 + 4]

《PyTorch 官方文档:BROADCASTING SEMANTICS》

相关文章:

PyTorch 中张量运算广播

TLDR 右对齐,空补一,从左往右依维运算 [m] [x, y] [m x, m y] 正文 以如下 a b 两个 tensor 计算为例 a torch.tensor([[1],[2],[3], ]) b torch.tensor([[[1, 2, 3],],[[4, 5, 6],],[[7, 8, 9],], ]) # a.shape (3, 1) # b.shape (3, 1, 3)首先…...

Blender:使用立方体制作动漫头像

好久没水文章 排名都掉到1w外了 ~_~ 学习一下blender,看能不能学习一点曲面变形的思路 一些快捷键 ctrl 空格:区域最大化,就是全屏 ctrl alt 空格:也是区域最大化 shift b:框选区域然后最大化显示该范围 shift 空…...

【ppt技巧】ppt里的图片如何提取出来?

之前分享过如何将PPT文件导出成图片,今天继续分享PPT技巧,如何提取出PPT文件里面的图片。 首先,我们将PPT文件的后缀名,修改为rar,将文件改为压缩包文件 然后我们将压缩包文件进行解压 最好是以文件夹的形式解压出来…...

Python学习基础笔记七十三——调试程序

为什么要调试? 我们发现程序运行的结果和我们预期的不符。 程序运行的错误,我们通常叫做bug。 有两种类型的bug:语句错误和逻辑错误。 所谓语句错误,就是执行代码的时候,解释器就可以直接发现的代码错误&#xff0c…...

BOSHIDA DC电源模块关于电容器的电解液位置

BOSHIDA DC电源模块关于电容器的电解液位置 DC电源模块中的电容器扮演着一个非常重要的角色,它们能够对电路提供稳定的电源电压,同时也可以作为电路中的滤波器,去除电路中的噪声和纹波。在DC电源模块中使用的电容器通常是电解型电容器&#…...

如何实现 Es 全文检索、高亮文本略缩处理(封装工具接口极致解耦)

如何实现 Es 全文检索、高亮文本略缩处理 前言技术选型JAVA 常用语法说明全文检索开发高亮开发Es Map 转对象使用核心代码 Trans 接口(支持父类属性的复杂映射)Trans 接口可优化的点高亮全局配置类如下真实项目落地效果为什么不用 numOfFragments、fragm…...

C++多线程编程(第四章 案例1,C++11和C++17 多核并行计算样例)

目录 4.1手动实现多核base16编码4.1.1 实现base16编码4.1.2无多线程代码4.1.3 C 11多线程代码4.1.4 C 17多线程并发4.1.5 所有测试代码汇总 4.1手动实现多核base16编码 4.1.1 实现base16编码 二进制转换为字符串 一个字节8位,拆分为两个4位字节(最大值…...

获取远程仓库的信息和远程分支的信息

前记: git svn sourcetree gitee github gitlab gitblit gitbucket gitolite gogs 版本控制 | 仓库管理 ---- 系列工程笔记. Platform:Windows 10 Git version:git version 2.32.0.windows.1 Function:获取远程仓库的信息和远…...

QT学习day1

一、思维导图 二、作业&#xff1a;实现登录界面 #include "widget.h" #include<QDebug> #include<QIcon>Widget::Widget(QWidget *parent): QWidget(parent) {/**********************窗口******************///设置窗口图标this->setWindowTitle…...

unity面试八股文 - 框架设计与资源管理

Unity项目框架是如何设计的&#xff1f;有哪些原则 在设计Unity项目框架时&#xff0c;通常会遵循一些基本的原则和步骤。以下是主要的一些原则&#xff1a; 模块化&#xff1a;每个功能都应该被作为一个独立的模块来处理&#xff0c;这样可以方便修改和维护。 低耦合&#x…...

智能网关IOT 2050采集应用

SIMATIC IOT2050 是西门子公司新推出的应用于企业数字化转型的智能边缘计算和云连接网关。 它将云、公司内 IT 和生产连接在一起&#xff0c;专为直接在生产环境中获取、处理和传输数据的工业 IT 解 决方案而设计。例如&#xff0c;它可用于将生产 过程与基于云的机器和生产数据…...

iOS代码混淆-从入门到放弃

​ 目录 1. 什么是iOS代码混淆&#xff1f; 2. iOS自动代码混淆的方法是什么&#xff1f; 3. iOS代码混淆的作用是什么&#xff1f; 4. 怎么样才能做到更好的iOS代码混淆&#xff1f; 总结 参考资料 1. 什么是iOS代码混淆&#xff1f; 代码混淆是指将程序中的方法名、属…...

基于Eigen的位姿转换

位姿中姿态的表示形式有很多种&#xff0c;比如&#xff1a;旋转矩阵、四元数、欧拉角、旋转向量等等。这里基于Eigen实现四种数学形式的相互转换功能。本文利用Eigen实现上述四种形式的相互转换。我这里给出一个SE3&#xff08;4*4&#xff09;(先平移、再旋转)的构建方法&…...

Jmeter之Bean shell使用详解

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精…...

TCP/IP(八)TCP的连接管理(五)四次握手

一 tcp连接断开 每一个TCP报文的超时重传都由一个特定的内核参数来控制 ① 四次握手的过程 遗留&#xff1a; 谁先发送FIN包,一定是client吗? --> upload和download补充&#xff1a; 主动和被动断开连接的场景 "四次握手过程描述" F --> FIN --> F…...

MyBatis-Plus主键生成策略[MyBatis-Plus系列] - 第491篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 ​…...

Spring——和IoC相关的特性

目录 IoC中Bean的生命周期 实例化&#xff08;Instantiation&#xff09; 属性注入&#xff08;Populate Properties&#xff09; 初始化&#xff08;Initialization&#xff09; 使用&#xff08;Bean in Use&#xff09; 销毁&#xff08;Destruction&#xff09; Laz…...

在 TensorFlow 中调试

如果调试是消除软件错误的过程&#xff0c;那么编程一定是添加错误的过程。Edsger Dijkstra。来自 https://www.azquotes.com/quote/561997 一、说明 在这篇文章中&#xff0c;我想谈谈 TensorFlow 中的调试。 在之前的一些帖子&#xff08;此处、此处和此处&#xff09;中&…...

想要精通算法和SQL的成长之路 - 连续的子数组和

想要精通算法和SQL的成长之路 - 连续的子数组和 前言一. 连续的子数组和1.1 最原始的前缀和1.2 前缀和 哈希表 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 连续的子数组和 原题链接 1.1 最原始的前缀和 如果这道题目&#xff0c;用前缀和来算&#xff0c;我们的思路…...

【C++】头文件chrono

2023年10月16日&#xff0c;周一晚上 当前我只是简单的了解了一下chrono 以后可能会深入了解chrono并更新文章 目录 功能原理头文件chrono中的一些类头文件chrono中的数据类型一个简单的示例程序小实验&#xff1a;证明a的效率比a高 功能 这个chrono头文件是用来处理时间的…...

【DeepSeek+Grafana可视化实战指南】:20年SRE亲授5大避坑法则与实时指标监控黄金配置

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeekGrafana可视化实战导论 DeepSeek 系列大模型&#xff08;如 DeepSeek-V2、DeepSeek-Coder&#xff09;在推理服务中产生丰富的运行时指标——包括 token 吞吐量、P99 延迟、GPU 显存占用、请求…...

SK海力士晶圆代工战略:特色工艺如何重塑半导体产业格局

1. 韩国半导体雄心&#xff1a;从存储巨头到晶圆代工的野望最近几年&#xff0c;全球半导体产业的新闻头条几乎被台积电、英特尔和三星的千亿美元级投资计划所占据。然而&#xff0c;在2021年5月&#xff0c;一则来自韩国的消息&#xff0c;虽然声量相对较小&#xff0c;却揭示…...

BK3633深度睡眠功耗实测:如何配置到1uA并保持定时器工作(避坑指南)

BK3633深度睡眠功耗优化实战&#xff1a;从理论到1uA的完整实现路径 在电池供电的物联网设备设计中&#xff0c;低功耗性能往往直接决定产品的市场竞争力。BK3633作为一款集成蓝牙5.2和专有2.4GHz协议的双模芯片&#xff0c;其规格书中标榜的"深度睡眠约1uA"参数尤其…...

3步快速安装:APK Installer让你在Windows电脑上直接运行Android应用

3步快速安装&#xff1a;APK Installer让你在Windows电脑上直接运行Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows电脑上直接安装和运行Android…...

taotoken api key管理与访问控制保障企业开发安全

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API Key 管理与访问控制&#xff1a;保障企业开发安全 在团队协作开发中&#xff0c;安全、可控地使用大模型能力是技术负…...

基于SendBird SDK的iOS即时通讯应用架构与最佳实践详解

1. 项目概述&#xff1a;一个iOS即时通讯的“样板间”如果你正在为你的iOS应用寻找一个功能完整、架构清晰的即时通讯&#xff08;IM&#xff09;功能实现参考&#xff0c;那么sendbird/sendbird-chat-sample-ios这个GitHub仓库绝对值得你花上半天时间好好研究。它不是一个简单…...

OpenHarmony移植实战:解决ACE组件编译依赖冲突的通用方案

1. OpenHarmony移植中的ACE组件依赖问题解析 最近在将OpenHarmony移植到全志T113平台时&#xff0c;遇到了一个典型问题&#xff1a;添加ACE组件后编译报错&#xff0c;提示找不到海思芯片相关的硬件抽象层文件。这个问题其实反映了OpenHarmony生态发展过程中的一个普遍现象—…...

终极魔兽争霸III地图编辑器HiveWE:从缓慢加载到秒级编辑的完整指南

终极魔兽争霸III地图编辑器HiveWE&#xff1a;从缓慢加载到秒级编辑的完整指南 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为魔兽争霸III原版编辑器缓慢的加载速度而烦恼吗&#xff1f;还在为复杂的…...

3分钟让你的Windows桌面焕然一新:NoFences开源分区神器

3分钟让你的Windows桌面焕然一新&#xff1a;NoFences开源分区神器 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在杂乱无章的桌面图标中寻找需要的文件&…...

Docker容器化高可用架构部署方案(二)

01-环境准备 本文档详细介绍部署前的环境准备工作&#xff0c;包括操作系统要求、Docker安装、内核参数配置和网络确认。 系统要求 硬件要求 CPU&#xff1a;至少2核心 内存&#xff1a;至少4GB 磁盘&#xff1a;至少40GB可用空间 操作系统 OpenEuler 24.03 SP3 或其他L…...