PyTorch使用(7)-张量常见运算函数

1. 基本数学运算

1.1 平方根和幂运算

import torchx = torch.tensor([4.0, 9.0, 16.0])# 平方根
sqrt_x = torch.sqrt(x)  # tensor([2., 3., 4.])# 平方
square_x = torch.square(x)  # tensor([16., 81., 256.])# 任意幂次
pow_x = torch.pow(x, 3)  # tensor([64., 729., 4096.])# 运算符形式
sqrt_x_alt = x ** 0.5
square_x_alt = x ** 2

1.2 指数和对数

# 自然指数
exp_x = torch.exp(x)  # tensor([5.4595e+01, 8.1031e+03, 8.8861e+06])# 自然对数
log_x = torch.log(x)  # tensor([1.3863, 2.1972, 2.7726])# 以10为底的对数
log10_x = torch.log10(x)  # tensor([0.6021, 0.9542, 1.2041])# 带clip的最小值保护(避免log(0))
safe_log = torch.log(x + 1e-8)

2. 统计运算

2.1 求和与均值

x = torch.randn(3, 4)  # 3x4随机张量# 全局求和
total = torch.sum(x)  # 标量# 沿特定维度求和
sum_dim0 = torch.sum(x, dim=0)  # 形状(4,),沿行求和
sum_dim1 = torch.sum(x, dim=1)  # 形状(3,),沿列求和# 均值计算
mean_val = torch.mean(x)  # 全局均值
mean_dim0 = torch.mean(x, dim=0)  # 沿行求均值

2.2 极值与排序

# 最大值/最小值
max_val = torch.max(x)  # 全局最大值
min_val = torch.min(x)  # 全局最小值# 沿维度的极值及索引
max_vals, max_indices = torch.max(x, dim=1)  # 每行最大值及位置
min_vals, min_indices = torch.min(x, dim=0)  # 每列最小值及位置# 排序
sorted_vals, sorted_indices = torch.sort(x, dim=1, descending=True)

2.3 方差与标准差

# 无偏方差(分母n-1)
var_x = torch.var(x, unbiased=True)  # 全局方差
var_dim0 = torch.var(x, dim=0)  # 沿行方差# 标准差
std_x = torch.std(x)  # 全局标准差
std_dim1 = torch.std(x, dim=1)  # 沿列标准差

3. 矩阵运算

3.1 基本矩阵运算

A = torch.randn(3, 4)
B = torch.randn(4, 5)# 矩阵乘法
matmul = torch.matmul(A, B)  # 形状(3,5)
matmul_alt = A @ B  # 等价写法# 点积(向量)
v1 = torch.randn(3)
v2 = torch.randn(3)
dot_product = torch.dot(v1, v2)# 批量矩阵乘法
batch_A = torch.randn(5, 3, 4)  # 5个3x4矩阵
batch_B = torch.randn(5, 4, 5)  # 5个4x5矩阵
batch_matmul = torch.bmm(batch_A, batch_B)  # 形状(5,3,5)

3.2 矩阵分解

# 特征分解(对称矩阵)
sym_matrix = torch.randn(3, 3)
sym_matrix = sym_matrix @ sym_matrix.T  # 构造对称矩阵
eigenvals, eigenvecs = torch.linalg.eigh(sym_matrix)# SVD分解
U, S, V = torch.linalg.svd(A)

4. 比较运算

4.1 元素级比较

a = torch.tensor([1, 2, 3])
b = torch.tensor([3, 2, 1])# 比较运算
eq = torch.eq(a, b)  # tensor([False, True, False])
gt = torch.gt(a, b)  # tensor([False, False, True])
lt = torch.lt(a, b)  # tensor([True, False, False])# 运算符形式
eq_alt = a == b
gt_alt = a > b

4.2 约简比较

# 判断所有元素为True
all_true = torch.all(eq)# 判断任一元素为True
any_true = torch.any(gt)# 判断张量相等(形状和值)
torch.equal(a, b)  # False

5. 规约运算

5.1 常用规约

x = torch.randn(2, 3)# 求和规约
sum_all = x.sum()  # 全局求和
sum_dim = x.sum(dim=1)  # 沿维度规约# 累积和
cumsum = x.cumsum(dim=0)  # 沿维度累积# 乘积规约
prod_all = x.prod()  # 全局乘积

5.2 高级规约

# 加权平均
weights = torch.softmax(torch.randn(3), dim=0)
weighted_mean = torch.sum(x * weights, dim=1)# 沿维度的logsumexp(数值稳定)
logsumexp = torch.logsumexp(x, dim=1)

6. 工程实践建议

6.1. 广播机制理解:确保运算张量的形状兼容

# 广播示例
a = torch.randn(3, 1)
b = torch.randn(1, 3)
c = a + b  # 形状(3,3)

6.2. 原地操作:使用_后缀节省内存

x.sqrt_()  # 原地平方根
x.add_(1)  # 原地加1

6.3. 设备一致性:确保运算张量在同一设备

if torch.cuda.is_available():x = x.cuda()y = y.cuda()z = x + y

6.4. 梯度保留:注意运算对计算图的影响

x = torch.tensor(2.0, requires_grad=True)
y = x ** 2
y.backward()  # dy/dx = 2x = 4.0

6.5. 数值稳定性:使用稳定实现

# 不稳定的softmax实现
unstable = torch.exp(x) / torch.exp(x).sum(dim=1, keepdim=True)# 稳定的softmax实现
stable = torch.softmax(x, dim=1)

7. 性能优化技巧

7.1 向量化操作:避免Python循环

# 不好的做法
result = torch.zeros_like(x)
for i in range(x.size(0)):result[i] = x[i] * 2# 好的做法
result = x * 2

7.2. 融合操作:减少中间结果

# 低效
temp = x + y
result = temp * z# 高效
result = (x + y) * z

7.3. 使用内置函数:利用优化实现

# 自定义实现
custom_norm = torch.sqrt(torch.sum(x ** 2))# 内置优化函数
optimized_norm = torch.norm(x)

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

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

相关文章

Nginx功能及应用全解:从负载均衡到反向代理的全面剖析

Nginx作为一款开源的高性能HTTP服务器和反向代理服务器,凭借其高效的资源利用率和灵活的配置方式,已成为互联网领域中最受欢迎的Web服务器之一。无论是作为HTTP服务器、负载均衡器,还是作为反向代理和缓存服务器,Nginx的多种功能广…

安徽京准:NTP时间同步服务器操作使用说明

安徽京准:NTP时间同步服务器操作使用说明 3.1 连接天线 天线连接到“ANT”口。 3.2 连接电源 将220V电源线连到AC220V座上或将电源适配器(7.5V~12V)接到DC口上。也可以同时接上,提高供电可靠性。 3.3 LAN网口 网线连接到NTP…

Java项目之基于ssm的怀旧唱片售卖系统(源码+文档)

项目简介 怀旧唱片售卖系统实现了以下功能: 用户信息管理: 用户信息新增:添加新用户的信息。 用户信息修改:对现有用户信息进行修改。 商品信息管理: 商品信息添加:增加新的商品(唱片&#x…

基于 Python 的自然语言处理系列(70):检索增强生成(RAG)

1. 什么是 RAG? 在许多大模型(LLM)应用场景中,我们需要使用特定的用户数据,而这些数据并未包含在模型的训练集中。检索增强生成(Retrieval Augmented Generation,RAG)是一种有效的解…

CAD插件实现:所有文字显示到列表、缩放、编辑——CAD-c#二次开发

当图中有大量文字,需要全部显示到一个列表时并缩放到需要的文字时,可采用插件实现,效果如下: 附部分代码如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…

Systemd构建自动化备份服务与外部存储管理

实训背景 你是一家数据公司的系统管理员,需设计一套自动化备份系统,满足以下需求: 定期备份:每周日凌晨1点将 /data 目录压缩备份到 /backups。外部存储挂载:插入USB设备时自动挂载到 /mnt/usb,并触发增量…

PostgreSQL中根据另一表的值来更新一个字段

UPDATE table1 SET value t2.new_value FROM table2 t2 WHERE table1.id t2.reference_id; 解释 UPDATE table1:指定要更新的表,不要用别名。 SET value t2.new_value:设置要更新的字段及其新值,这里新值来自 table2。也可更…

#SVA语法滴水穿石# (000)断言基本概念和背景

一、前言 随着数字电路规模越来越大、设计越来越复杂,使得对设计的功能验证越来越重要。首先,我们要明白为什么要对设计进行验证?验证有什么作用?例如,在用FPGA进行设计时,我们并不能确保设计出来的东西没有功能上的漏洞,因此在设计后我们都会对其进行验证仿真。换句话说…

Git 从入门到精通(开源协作特别版)

🧠 Git 从入门到精通(开源协作特别版) ✅ 基础命令 🧰 高级用法 🛠️ 开源实战技巧 🌍 GitHub 社区协作 适合:从0开始 → 熟练开发者 → 参与/维护开源项目 🔰 第1章:…

【SQL】取消sql某一列的唯一值key值的方法

在插入数据到sql时,遇到了这个问题: Duplicate entry ‘XXX’ for key 起因是: 我之前设计表的时候,手动给product_title 这个列加了一个key, key 是这个字段的唯一键约束,就不能重复在这一列存入重复的数…

【小沐学Web3D】three.js 加载三维模型(React Three Fiber)

文章目录 1、简介1.1 Three.js1.2 React Three Fiber 2、测试2.1 初始化环境2.2 app.js修改(显示内置立方体)2.3 app.js修改(显示内置球体)2.4 app.js修改(显示自定义立方体)2.5 app.js修改(显示…

本地部署 Firecrawl 爬虫让 AI 知识库更丰满

https://www.firecrawl.dev/ firecrawl-logo-with-fire.png 什么是Firecrawl Firecrawl 是一款 可以将网站转换为 便于AI处理的Markdown 格式的爬虫工具 ,主要 提供 API 服务 ,无需站点地图,只需要接收一个 URL 地址就可以爬取网站及网站下可…

纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个

算法索引 01背包优化前空间优化版(使用一维数组)优化后的模拟流程图为何优化后,j不能使用正序遍历模拟流程图 代码对应实现案例 01背包 优化前 /*** 0-1背包问题解法(与下方代码表格示例对应,已模拟验证)*…

APang网联科技项目报告【服务器篇】

APang网联科技:连接未来,智能领航 公司简介 APang网联科技成立于 [2005年],总部位于 [广东深圳],是一家集网络技术研发、系统集成、项目实施与运维服务为一体的高新技术企业。我们致力于为客户提供全方位、定制化的网络部署解决…

Scade One - 将MBD技术从少数高安全领域向更广泛的安全嵌入式软件普及

Scade One是继Scade Suite version 6自2008年起发展近20年后的首次主要改进版本。在Scade One发布的同时,Scade团队发布了一系列介绍Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的内容中,将复述博客…

Word在生成PDF后,PDF左侧导航书签目录错误显示的解决方法

1、打开要转换的word文件,点击“开始”,“另存为” 2、保存在本地时,在“保存类型”的下拉列表中选择“PDF(*.pdf)” 3、选择完保存类型后,点击“选项”按钮 4、在弹出的“选项”框中,选择“创建…

Windows系统服务器安装Office Online Server

服务器配置 配置参数OSThe 64-bit edition of Windows Server 2016CPU4RAM8GNetwork开启Hard disk80GPort80, 443, 809 执行命令 PowerShell中添加Windows服务: Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,…

【小沐学Web3D】three.js 加载三维模型(Angular)

文章目录 1、简介1.1 three.js1.2 angular.js 2、three.js Angular.js结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了…

简单程序语言理论与编译技术·22 实现一个从AST到RISCV的编译器

本文是记录专业课“程序语言理论与编译技术”的部分笔记。 LECTURE 22(实现一个从AST到RISCV的编译器) 一、问题分析 1、完整的编译器(如LLVM)需先完成AST到IR的转换,并进行代码优化,再到汇编&#xff0…

JavaWeb 课堂笔记 —— 02 JavaScript

本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…