Pytorch使用教学8-张量的科学运算

在介绍完PyTorch中的广播运算后,继续为大家介绍PyTorch的内置数学运算:
- 首先对内置函数有一个功能印象,知道它的存在,使用时再查具体怎么用
- 其次,我还会介绍
PyTorch科学运算的注意事项与一些实用小技巧
1 基本数学运算
| 函数 | 功能 |
|---|---|
| torch.add(t1,t2 ) | 等效于t1+t2 |
| torch.sub(t1,t2) | 等效于t1-t2 |
| torch.mul(t1,t2) | 等效于t1*t2 |
| torch.div(t1,t2) | 等效于t1/t2 |
2 进行数值调整
t = torch.randn(5)
t
# tensor([ 0.3806, 0.9064, -1.9179, 2.0816, -0.4153])
返回绝对值
torch.abs(t)
# tensor([0.3806, 0.9064, 1.9179, 2.0816, 0.4153])
返回相反数
torch.neg(t)
# tensor([-0.3806, -0.9064, 1.9179, -2.0816, 0.4153])
四舍五入
torch.round(t)
# tensor([ 0., 1., -2., 2., -0.])
向上取整
torch.ceil(t)
# tensor([ 1., 1., -1., 3., -0.])
向下取整
torch.floor(t)
# tensor([ 0., 0., -2., 2., -1.])
注:虽然此类型函数并不会对原对象进行调整,而是输出新的结果。
# t本身并未发生变化
t
# tensor([ 0.3806, 0.9064, -1.9179, 2.0816, -0.4153])
若要对原对象本身进行修改,可使用方法_()。
# 使用方法_()
t.round_()
# tensor([ 0., 1., -2., 2., -0.])# 原对象也进行了改变
t
# tensor([ 0., 1., -2., 2., -0.])
3 常用科学计算
需要注意的有以下两点:
- 因为张量能指定在
CPU或者GPU上运行,因此tensor的大多数科学计算只能作用于tensor对象,而不能和Python对象混用
# 计算3的3次方
torch.pow(3, 3)
# TypeErrortorch.pow(torch.tensor(3), 3)
# tensor(27)
- 由于会涉及
GPU计算,所以对运算结果一般是小数的函数,要求函数只能输入浮点型张量,而不能是整型
t = torch.arange(1, 4)
t.dtype
# torch.int64
torch.exp(t)
# RuntimeErrortorch.exp(t.float())
# tensor([1.0000, 2.7183, 0.1353, 7.3891, 1.0000])
其他常用科学计算有:
| 数学运算函数 | 数学公式 | 功能 |
|---|---|---|
| 幂运算 | ||
| torch.exp(t) | $ y_{i} = e^{x_{i}} $ | 返回以e为底、t中元素为幂的张量 |
| torch.pow(t,n) | $\text{out}_i = t ^ \text{n} $ | 返回t的n次幂 |
| torch.sqrt(t) | $ \text{out} = \sqrt{\text{input}} $ | 返回t的平方根 |
| torch.square(t) | $ \text{out}_i = x_i ^ \text{2} $ | 返回输入的元素平方 |
| 对数运算 | ||
| torch.log10(t) | $ y_{i} = \log_{10} (x_{i}) $ | 返回以10为底的t的对数 |
| torch.log(t) | $ y_{i} = \log_{e} (x_{i}) $ | 返回以e为底的t的对数 |
| torch.log2(t) | $ y_{i} = \log_{2} (x_{i}) $ | 返回以2为底的t的对数 |
| torch.log1p(t) | $ y_i = \log_{e} (x_i $ + 1) | 返回一个加自然对数的输入数组。 |
| 三角运算 | ||
| torch.sin(t) | 正弦 | |
| torch.cos(t) | 余弦 | |
| torch.tan(t) | 正切 |
4 统计分析
此类计算是对某张量进行某种总结,最后得出一个具体总结值的函数。
| 函数 | 功能 |
|---|---|
| torch.mean(t) | 返回张量均值 |
| torch.var(t) | 返回张量方差 |
| torch.std(t) | 返回张量标准差 |
| torch.var_mean(t) | 返回张量方差和均值 |
| torch.std_mean(t) | 返回张量标准差和均值 |
| torch.max(t) | 返回张量最大值 |
| torch.argmax(t) | 返回张量最大值索引 |
| torch.min(t) | 返回张量最小值 |
| torch.argmin(t) | 返回张量最小值索引 |
| torch.median(t) | 返回张量中位数 |
| torch.sum(t) | 返回张量求和结果 |
| torch.logsumexp(t) | 返回张量各元素求和结果,适用于数据量较小的情况 |
| torch.prod(t) | 返回张量累乘结果 |
| torch.dist(t1, t2) | 计算两个张量的闵式距离,可使用不同范式 |
| torch.topk(t) | 返回t中最大的k个值对应的指标 |
- 这里我们常用的距离公式
dist(),为闵可夫斯基距离,通过输入不同的p值,可方便计算曼哈顿距离、欧拉距离:
# 输入float型
t1 = torch.tensor([1, 2, 3]).float()
t2 = torch.tensor([4, 5, 6]).float()# 计算曼哈顿距离
torch.dist(t1, t2, 1)
# tensor(9.)# 计算欧拉距离
torch.dist(t1, t2, 2)
# tensor(5.1962)
- 统计分析是一个张量序列返回一个结果,因此若是针对高维张量,则可指定某维度进行计算:
# 创建一个3*3的二维张量
t2 = torch.arange(6).float().reshape(2, 3)
t2# 按照第一个维度求和(按列求和)
torch.sum(t2, dim = 0)
# tensor([3., 5., 7.])
理解为:按照第一个维度是行,所以将每行对应元素相加,就是按列求和。
这里一定要将dim参数和shape返回结果一一对应。不理解的同学可看。
# 创建一个2*3*4的三维张量
t3 = torch.arange(24).float().reshape(2, 3, 4)
t3
# tensor([[[ 0., 1., 2., 3.],
# [ 4., 5., 6., 7.],
# [ 8., 9., 10., 11.]],# [[12., 13., 14., 15.],
# [16., 17., 18., 19.],
# [20., 21., 22., 23.]]])# 第一维度是代表几个二维矩阵,就是二维矩阵的对应位置相加
torch.sum(t3, dim = 0)
# tensor([[12., 14., 16., 18.],
# [20., 22., 24., 26.],
# [28., 30., 32., 34.]])# 第二个维度代表行,就是向量,每个二维矩阵中的向量对应位置相加
torch.sum(t3, dim = 1)
# tensor([[12., 15., 18., 21.],
# [48., 51., 54., 57.]])# 第三个维度是列,就是零维张量,就是每个向量进行相加
torch.sum(t3, dim = 2)
# tensor([[ 6., 22., 38.],
# [54., 70., 86.]])
这样理解维度是不是清晰明了?
5 比较运算
常用于不同张量之间的逻辑运算,最终返回布尔值。需要注意的是eq()与equal()的区别。
t1 = torch.tensor([1.0, 2, 4])
t2 = torch.tensor([1.0, 2, 5])
比较各元素是否相等
torch.eq(t1, t2)
# tensor([ True, True, False])# 等效t1 == t2
t1 == t2
# tensor([ True, True, False])
判断是否是相同的张量
torch.equal(t1, t2)
# False
其它比较计算还有:
| 函数 | 功能 |
|---|---|
| torch.gt(t1, t2) | 比较t1各元素是否大于t2各元素,等效> |
| torch.lt(t1, t2) | 比较t1各元素是否小于t2各元素,等效< |
| torch.ge(t1, t2) | 比较t1各元素是否大于或等于t2各元素,等效>= |
| torch.le(t1, t2) | 比较t1各元素是否小于等于t2各元素,等效<= |
| torch.ne(t1, t2) | 比较t1、t2各元素是否不相同,等效!= |
Pytorch张量操作大全:
Pytorch使用教学1-Tensor的创建
Pytorch使用教学2-Tensor的维度
Pytorch使用教学3-特殊张量的创建与类型转化
Pytorch使用教学4-张量的索引
Pytorch使用教学5-视图view与reshape的区别
Pytorch使用教学6-张量的分割与合并
Pytorch使用教学7-张量的广播
Pytorch使用教学8-张量的科学运算
Pytorch使用教学9-张量的线性代数运算
Pytorch使用教学10-张量操作方法大总结
有关Pytorch建模相关的AI干货请扫码关注公众号「AI有温度」阅读获取

相关文章:
Pytorch使用教学8-张量的科学运算
在介绍完PyTorch中的广播运算后,继续为大家介绍PyTorch的内置数学运算: 首先对内置函数有一个功能印象,知道它的存在,使用时再查具体怎么用其次,我还会介绍PyTorch科学运算的注意事项与一些实用小技巧 1 基本数学运算…...
[Spring Boot]登录密码三种加密方式
简述 介绍其三种密码加密方法 1.SM2加密与验签 2.随机密码盐加密 3.MD5加密 推荐使用方法1,其次使用方法2,最不推荐的是方法3。方法3极其容易被密码字典破解,如果项目进行安全测试,通常是不允许的加密方式。 SM2加密与验签 引入…...
前端面试项目细节重难点分享(十三)
面试题提问:分享你最近做的这个项目,并讲讲该项目的重难点? 答:最近这个项目是一个二次迭代开发项目,迭代周期一年,在做这些任务需求时,确实有很多值得分享的印象深刻的点,我讲讲下面…...
每天五分钟深度学习:向量化方式完成逻辑回归m个样本的前向传播
本文重点 我们已经知道了向量化可以明显的加速程序的运行速度,本节课程将使用向量化来完成逻辑回归的前向传播,不使用一个for循环。 逻辑回归的前向传播 我们先来回忆一下逻辑回归的前向传播,如果我们有m个训练样本,首先对第一个样本进行预测,我们需要计算z,然后计算预…...
以线程完成并发的UDP服务端
网络(九)并发的UDP服务端 以线程完成功能 客户端 // todo UDP发送端 #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <stdlib.h> #include <string.h…...
linux c 特殊字符分割
/* * brief: 根据split_symbol分割字符串 * param: str为要分割的字符串,split_symbol是分隔符 * return:返回garray的指针数组,如果返回非空需要自己处理释放 */ GPtrArray_autoptr char_sz_spilt(pchar* str, pchar split_symbol) {if (NUL…...
搭建本地私有知识问答系统:MaxKB + Ollama + Llama3 (wsl网络代理配置、MaxKB-API访问配置)
目录 搭建本地私有知识问答系统:MaxKB、Ollama 和 Llama3 实现指南引言MaxKB+Ollama+Llama 3 Start buildingMaxKB 简介:1.1、docker部署 MaxKB(方法一)1.1.1、启用wls或是开启Hyper使用 WSL 2 的优势1.1.2、安装docker1.1.3、docker部署 MaxKB (Max Knowledge Base)MaxKB …...
谷粒商城实战笔记-65-商品服务-API-品牌管理-表单校验自定义校验器
文章目录 1,el-form品牌logo图片自定义显示2,重新导入和注册element-ui组件3,修改brand-add-or-update.vue控件的表单校验规则firstLetter 校验规则sort 校验规则 1,el-form品牌logo图片自定义显示 为了在品牌列表中自定义显示品…...
学好C++之——命名空间
c开始学习之时,你不可避免会遇到一个新朋友,那就是——namespace(命名空间)。 那么这篇文章就来为你解决这个小麻烦喽~ 目录 1.namespace存在的意义 2.namespace的定义 3.namespace的使用 1.namespace存在的意义 在C中&#…...
pytorch lightning报错all tensors to be on the same device
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! 修改指定为gpu trainer pl.Trainer(max_epochstrain_params.iterations, loggertb_logger,acceleratorgpu, devices1)...
Redis中的哨兵(Sentinel)
上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。 文章目录 一、引入哨兵机制 二、基本概念 三、主从复制的问题 四、哨…...
产业创新研究杂志产业创新研究杂志社产业创新研究编辑部2024年第12期目录
高质量发展 如何在新一轮产业链变革中平稳应对挑战 王宏利; 1-3《产业创新研究》投稿:cnqikantg126.com 基于ERGM的城市间绿色低碳技术专利转让网络结构及演化研究 吕彦朋;姜军;张宁; 4-6 数字基础设施建设对城市FDI的影响——基于“宽带中国”试点政策…...
网闸(Network Gatekeeper或Security Gateway)
本心、输入输出、结果 文章目录 网闸(Network Gatekeeper或Security Gateway)前言网闸主要功能网闸工作原理网闸使用场景网闸网闸(Network Gatekeeper或Security Gateway) 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助…...
C#中的字符串
String 在实例方法中string虽然传入的是引用类型 但是修改string 并不是修改原来堆里面的值 而是又重新创建一个堆值 用来然后用方法内的变量指向新的堆值 C# 中的字符串(string 类型)提供了许多有用的方法来处理字符串数据。以下是一些常用的字符…...
docker安装部署elasticsearch7.15.2
docker安装部署elasticsearch7.15.2 1.拉取es镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2如果不想下载或者镜像拉去太慢可以直接下载文章上面的镜像压缩包 使用镜像解压命令 docker load -i elasticsearch-7-15-2.tar如下图所示就表示镜像解压成…...
Symfony 入门指南:快速安装与基础配置
Symfony 入门指南:快速安装与基础配置 Symfony 是一个强大而灵活的 PHP 框架,广泛应用于构建现代 Web 应用程序。本指南将带您一步一步地了解如何快速安装 Symfony,并完成基本配置,以便您能够开始使用这个强大的框架。 目录 引…...
3.3V升压至5V的AH6922芯片:高效能的SOP8封装解决方案
# 3.3V升压至5V的AH6922芯片:高效能的SOP8封装解决方案 在当今快速发展的电子设备领域,对于电源管理的需求日益增长。特别是对于便携式产品和手持设备,一个高效、稳定且体积小巧的升压解决方案变得至关重要。本文将介绍一款专为这些需求设计…...
赋能未来教育,3DCAT助力深圳鹏程技师学院打造5G+XR实训室
随着国家对教育行业的重视,实训室建设已成为推动教育现代化的关键。《教育信息化2.0行动计划》、《职业教育示范性虚拟仿真实训基地建设指南》等政策文件,明确指出了加强虚拟仿真实训教学环境建设的重要性。 在这一大背景下,教育行业对于实训…...
力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法
做题链接 目录 前言: 一、算法推导: 1.假设有环并且一定会相遇,那么一定是在环内相遇,且是快指针追上慢指针。 2.有环就一定会相遇吗?快指针是每次跳两步,有没有可能把慢指针跳过去? 3.那一定…...
React 常见的报错及解决方法
1、Warning: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons(无效的钩子调用。钩子只能在函数组件的内部调用。这可能是由于以下原因之一) 原因&#x…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
