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

news2024/9/25 16:30:29

在这里插入图片描述

在介绍完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)
# TypeError

torch.pow(torch.tensor(3), 3)
# tensor(27)
  • 由于会涉及GPU计算,所以对运算结果一般是小数的函数,要求函数只能输入浮点型张量,而不能是整型
t = torch.arange(1, 4)
t.dtype
# torch.int64
torch.exp(t)
# RuntimeError

torch.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有温度」阅读获取
在这里插入图片描述

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

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

相关文章

【python】PyQt5中QPushButton的用法详细解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【C/C++】printf和cout的区别

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

JAVA基础 - 继承和多态

目录 一. 继承 二. 多态 三. 引用类型的转换 检查 向上转型&#xff08;Upcasting&#xff09; 向下转型&#xff08;Downcasting&#xff09; 四. final关键字 一. 继承 在 Java 中&#xff0c;继承&#xff08;Inheritance&#xff09;是面向对象编程的一个重要特性&a…

openEuler操作系统下Oracle 19c 从19.3补丁更新到19.17

Oracle 19c 从补丁19.3更新到19.17的过程涉及到多个步骤&#xff0c;包括备份、下载补丁、替换OPatch、验证清单信息、冲突检测、空间检测、应用补丁等。以下是一个概括性的流程&#xff0c;但请注意&#xff0c;具体步骤可能会根据实际的Oracle环境、补丁内容和Oracle的官方指…

基于python的BP神经网络红酒品质分类预测模型

1 导入必要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from tensorflow.keras.models import Sequential from tenso…

DataEase一键部署:轻松搭建数据可视化平台

DataEase是一个开源的数据可视化和分析工具&#xff0c;旨在帮助用户轻松创建和共享数据仪表盘。它支持多种数据源&#xff0c;包括关系型数据库&#xff0c;文件数据源&#xff0c;NoSQL数据库等&#xff0c;提供强大的数据查询、处理和可视化功能。DataEase 不仅是一款数据可…

oracle读写时相关字符集详解

服务器端操作系统&#xff08;Oracle linux&#xff09;字符集 服务器端数据库字符集 客户端操作系统&#xff08;Oracle linux&#xff09;字符集 客户端工具sqlplus字符集 结论1&#xff1a;客户端工具sqlplus的会话&#xff0c;使用的字符集&#xff0c;是数据库字符集。…

如何排查GD32 MCU复位是由哪个复位源导致的?

上期为大家讲解了GD32 MCU复位包括电源复位和系统复位&#xff0c;其中系统复位还包括独立看门狗复位、内核软复位、窗口看门狗复位等&#xff0c;在一个GD32系统中&#xff0c;如果莫名其妙产生了MCU复位&#xff0c;如何排查具体是由哪个复位源导致的呢&#xff1f; GD32 MC…

反激Flyback从逆向到初步设计(UC2844)

一.Flyback基本拓扑 国标gb/t 12325-2008《电能质量供电电压偏差》规定&#xff1a;220v单向供电电压偏差为标称电压的-10%&#xff0c;7%。 对应220V的标称电压&#xff0c;其浮动范围是在198~235.4V。以下运算均基于此规定进行。 首先220V进入EMI模块&#xff0c;消除差模干扰…

虚拟机配置RabbitMQ集群教程

RabbitMQ是常用的一款消息中间件&#xff0c;那么如何在我们虚拟机中创建其集群呢&#xff1f;跟着博主这篇文章让你一步到位 本篇搭建的是三台机器为一个集群&#xff01;假设大家虚拟机都为初始化状态&#xff0c;从0开始&#xff08;注意集群搭建需要CentOS8以上环境&#x…

老板电器发布首个烹饪AI模型,揭秘其如何引领厨电行业变革

数字发展日新月异&#xff0c;智慧产品迭代更新。当前&#xff0c;我们或许正身处一场连科学巨人也无法预见的深度变革之中。现代科技使得普通人无需深入学习数学或编程知识&#xff0c;也能借助手机或电脑&#xff0c;体验“苏格拉底式”的在线指导&#xff0c;或者与“乔布斯…

js 习题 1

文章目录 前言T1T2T3T4T5T6T7T8T9结语 前言 『最孤独的人最亲切&#xff0c;受过伤的人总是笑的最灿烂。』—— 「素媛」 T1 let buf""; process.stdin.on("readable",function(){let chunkprocess.stdin.read();if(chunk){bufchunk.toString();} });pr…

在英特尔 Gaudi 2 上加速蛋白质语言模型 ProtST

引言 蛋白质语言模型 (Protein Language Models, PLM) 已成为蛋白质结构与功能预测及设计的有力工具。在 2023 年国际机器学习会议 (ICML) 上&#xff0c;MILA 和英特尔实验室联合发布了ProtST模型&#xff0c;该模型是个可基于文本提示设计蛋白质的多模态模型。此后&#xff0…

uniapp中@click或者@tap多层嵌套的问题解决方法

我们在开发页面的过程中。例如要设计一个九宫格的相册&#xff0c;并且加上删除上传图片和点击图片后预览图片大图的功能例如下图的演示功能。 点击图片后显示大图预览图片&#xff0c;点击x号后要删除掉当前的图片&#xff0c;那么我们设计的时候如果我们代码写成如下的格式 …

【JavaScript】`Map` 数据结构

文章目录 一、Map 的基本概念二、常见操作三、与对象的对比四、实际应用场景 在现代 JavaScript 中&#xff0c;Map 是一种非常重要且强大的数据结构。与传统的对象&#xff08;Object&#xff09;不同&#xff0c;Map 允许您使用各种类型的值作为键&#xff0c;不限于字符串或…

jenkins自动化持续集成

一、持续集成优势 1.1 解放重复劳动 一次设置&#xff0c;多次复用。持续集成任务可以解放集成、测试、部署等重复性劳动&#xff0c;通过自动化任务能够显著提升集成频率。 1.2 更快解决问题 接入持续集成任务后&#xff0c;能够更早地感知变更后效果&#xff0c;及时进入…

『 Linux 』信号的写入与保存

文章目录 信号的发送信号的保存sigset_t 类型与信号集操作函数阻塞信号集(信号屏蔽字)操作函数未决信号集操作函数验证阻塞信号集与未决信号集 信号的发送 $ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10)…

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查&#xff0c;然后自己用本地的环境&#xff0c;在自己建的库里面进行了sql语句的测试&#xff0c;主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…

Rce漏洞复习(ctfshow29-50)

Rce漏洞简介思维导图 Web29 代码审计&#xff1a; if(!preg_match("/flag/i", $c)){ eval($c); 传参没有flag&#xff08;大小写都没有出现&#xff09; Payload&#xff1a; ?csystem("ls"); ?csystem("tac *lag.php"); Web30 代码…

数据结构——排序大汇总(建议收藏)

这篇文章将为大家详细讲解各大排序的基本思想与实现代码~ 内有动图 首先&#xff0c;我们来看常见的排序有以下几大类&#xff1a; 1.插入排序 插入排序的主要思想是将每个位置的元素插入到前面已具备顺序的数组中 实际中我们玩扑克牌时&#xff0c;就用了插入排序的思想 …