【Pytorch学习笔记(三)】张量的运算(2)

一、引言

在《张量的运算(1)》中我们已经学习了几种张量中常用的非算数运算如张量的索引与切片,张量的拼接等。本节我们继续学习张量的算术运算。

二、张量的算术运算

(一)对应元素的加减乘除

在 PyTorch 中,张量的对应元素的算术运算包括加法、减法、乘法、除法等常见的数学运算。这些运算可以对张量进行逐元素操作(element-wise),也可以进行张量之间的广播运算(broadcasting)。

1.逐元素操作

# 创建两个张量
t1 = torch.tensor([[1, 2], [3, 4]])
t2 = torch.tensor([[5, 6], [7, 8]])# 加法
result_add = t1 + t2
print("加法结果:")
print(result_add)# 减法
result_sub = t1 - t2
print("\n减法结果:")
print(result_sub)# 乘法
result_mul = t1 * t2
print("\n乘法结果:")
print(result_mul)# 除法
result_div = t1 / t2
print("\n除法结果:")
print(result_div)

运行结果为:

加法结果:
tensor([[ 6,  8],[10, 12]])减法结果:
tensor([[-4, -4],[-4, -4]])乘法结果:
tensor([[ 5, 12],[21, 32]])除法结果:
tensor([[0.2000, 0.3333],[0.4286, 0.5000]])

2.广播运算

# 创建一个张量
t1 = torch.tensor([[1, 2], [3, 4]])# 与标量相加
scalar = 5
result_scalar_add = t1.add(scalar)
print("与标量相加:")
print(result_scalar_add)# 与行向量相加
row_vector = torch.tensor([10, 20])
result_row_add = t1.add(row_vector)
print("\n与行向量相加:")
print(result_row_add)# 与列向量相加
col_vector = torch.tensor([[100], [200]])
result_col_add = t1.add(col_vector)
print("\n与列向量相加:")
print(result_col_add)

运行结果为:

与标量相加:
tensor([[6, 7],[8, 9]])与行向量相加:
tensor([[11, 22],[13, 24]])与列向量相加:
tensor([[101, 102],[203, 204]])

总结,对张量进行对应元素的加减乘除运算时我们既可以直接使用运算符+-*/来运算,也可以使用tensor1.add(tensor2)tensor1.sub(tensor2)tensor1.mul(tensor2)tensor1.div(tensor2)进行运算。

(二)其它算术运算

1.取绝对值tensor.abs()

t1 = torch.tensor([[-1, 2], [-3, 4]])
print(f"t1中的元素取绝对值为\n{t1.abs()}")

2.裁剪tensor.clamp()[1]

tensor.clamp()是对输入参数按照自定义的范围进行裁剪,最后将参数裁剪的结果作为输出,所以输入参数一共有三个,分别是需要进行裁剪的Tensor数据类型的变量、裁剪的上上边界和裁剪的下边界,具体的裁剪过程是:使用变量中的每个元素分别和裁剪的上边界及裁剪的下边界的值进行比较,如果元素的值小于裁剪的下边界的值,该元素被重写成裁剪的下边界的值;同理,如果元素的值大于裁剪的上边界的值,该元素就被重写成裁剪的上边界的值。具体代码如下:

t1 = torch.tensor([[-1, 12], [-6, 4]])
print(f"将t1中元素进行裁剪,范围为[-5, 5]\n{t1.clamp(-5, 5)}")

运行结果为:

将t1中元素进行裁剪,范围为[-5, 5]
tensor([[-1,  5],[-5,  4]])

3.求幂运算tensor.pow(x)

tensor.pow(x)为求幂运算,x为要求的几次幂:

#对张量中的元素求二次幂
t1 = torch.tensor([[1, 2], [3, 4]])
print(f"将t1中元素求2次幂\n{t1.pow(2)}")

运行结果为:

将t1中元素求2次幂
tensor([[ 1,  4],[ 9, 16]])

4.矩阵与矩阵乘法tensor.mm()

tensor1.mm(tensor2)用来计算张量1与张量2之间的矩阵乘法,tensor1tensor2需要满足矩阵乘法规则:

t1 = torch.tensor([[1, 2, 3],[4, 5, 6]])
t2 = torch.tensor([[1, 2],[3, 4],[5, 6]])
print(f"将t1与t2进行矩阵乘法结果为{t1.mm(t2)}")

运行结果为:

将t1与t2进行矩阵乘法结果为tensor([[22, 28],[49, 64]])

5.矩阵与向量乘法tensor.mv()

tensor1.mv(tensor2)用来计算张量1与张量2(必须为一阶)之间的矩阵乘法,tensor2在实际运算前进行了转置:

t1 = torch.tensor([[1, 2, 3],[4, 5, 6]])
t2 =torch.tensor([1, 3, 5])
print(f"将t1与t2进行矩阵乘法结果为{t1.mv(t2)}")

运算结果为:

将t1与t2进行矩阵乘法结果为tensor([22, 49])

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

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

相关文章

C++的List类(一):List类的基本概念

目录 前言 List类的基本概念 List的构造函数 List类迭代器的使用 List的功能 List的元素访问 List与vector比较 前言 vector的insert和erase都会导致迭代器失效list的insert不会导致迭代器失效,erase会导致迭代器失效 insert导致失效的原因是开辟了新空间后…

massif-visualizer qpa.plugin: Could not load the Qt platform plugin “xcb“ in

massif-visualizer qpa.plugin: Could not load the Qt platform plugin "xcb" in 报这个错误,是因为,必现在 界面窗口 执行 $ massif-visualizer massif.log 如果是ssh远程链接执行,就会报错. #windows上查看 需要 安装远程桌…

全球化业务的网络安全挑战

随着企业业务的全球化,跨国数据传输和用户跨地域访问成为常态。这不仅带来了巨大的商业机会,也带来了以下网络安全挑战: 数据泄露风险:跨国数据传输增加了数据被截获和泄露的风险。访问限制:某些地区可能对互联网内容…

Failed to start docker.service: Unit docker.service is masked.

Failed to start docker.service: Unit docker.service is masked. 未知原因:docker 被mask 解决方式: systemctl unmask docker.service systemctl unmask docker.socket systemctl start docker.service Docker是一种相对使用较简单的容器&#xff0…

Visual Studio 2022-C语言如何防止头文件多次引入

头文件的包含 本地⽂件包含 #include "filename" 查找策略:先在源⽂件所在⽬录下查找,如果该头⽂件未找到,编译器就像查找库函数头⽂件⼀样在 标准位置查找头⽂件。 如果找不到就提⽰编译错误。 Linux环境的标准头⽂件的路径&…

如何自定义项目启动时的图案

说明:有的项目启动时,会在控制台输出下面的图案。本文介绍Spring Boot项目如何自定义项目启动时的图案; 生成字符图案 首先,找到一张需要设置的图片,使用下面的代码,将图片转为字符文件; impo…

【Unity每日一记】鼠标相关API

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

【WPF应用38】WPF 控件打开文件选择-OpenFileDialog的详解与示例

在 WPF 应用程序中,经常需要让用户选择文件,例如打开图片、文本文件等。OpenFileDialog 是一个用于实现这个功能的控件。本文将详细介绍 OpenFileDialog 的使用流程,并提供一个完整的示例代码。 一、WPF 控件打开文件选择的必要性 在 WPF 应…

Linux初学(十七)redis

一、简介 redis就是一个内存数据库 redis中的数据,都是保存在内存中 端口:6379 二、安装redis 方法一:编译安装 方法二:yum安装-epel 第一步:配置epel源 详见:http://t.csdnimg.cn/AFl1K第二步&#xff1a…

GaN肖特基势垒二极管(SBD)的多阴极应用建模与参数提取

GaN Schottky Barrier Diode (SBD) Modeling and Parameter Extraction for Multicathode Application(TED 24年) 摘要 本文提出了一种适用于多阴极应用的紧凑型可扩展GaN肖特基二极管大信号模型。详细给出了外在和内在模型参数的可扩展规则。实验和理…

kamailio mysql数据表解析

kamctl db exec "show tables;" 查询mysql数据表 acc:存储呼叫详单(Call Detail Records, CDRs)的信息,包括呼叫持续时间、呼叫状态、被叫号码等。这些记录有助于统计和分析呼叫的数据。 acc_cdrs:存储呼叫…

HTTP的强制缓存和协商缓存

HTTP的强制缓存和协商缓存 HTTP的缓存技术强制缓存ExpiresCache-Control 协商缓存If-Modified-Since和Last-ModifiedIf-None-Match和ETag优先级 可被缓存的请求方法总结 HTTP的缓存技术 当我们进行HTTP请求时,需要将请求报文发送给对端,当服务端收到请求…

Stm32 HAL库 访问内部flash空间

Stm32 HAL库 访问内部flash空间 代码的部分串口配置申明文件main函数 在一些时候,需要存储一些数据,但是又不想接外部的flash,那我们可以知道,其实还有内部的flash可以使用, 需要注意的是内部flash,读写次数…

书生浦语训练营二期第三次作业

文章目录 基础作业1. 在茴香豆 Web 版中创建自己领域的知识问答助手第一轮对话第二轮对话第三轮对话第四轮对话第五轮对话 2.在 InternLM Studio 上部署茴香豆技术助手修改配置文件创建知识库运行茴香豆知识助手 基础作业 1. 在茴香豆 Web 版中创建自己领域的知识问答助手 我…

【Docker常用命令(四)】

目录 Docker常用命令(四)注意 Docker常用命令(四) docker pause docker pause 命令用于暂停容器中的所有进程。docker pause CONTAINER [CONTAINER...]常用子命令和选项:无特定常用选项。docker port docker port 命令…

神经网络中的超参数调整

背景 在深度神经网络学习和优化中,超参数调整一项必备技能,通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。在本研究中使用了以下超参数&#x…

iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理

苹果公司去年与谷歌合作,宣布将制定新的行业标准来解决人们日益关注的跟踪器隐私问题。苹果计划在即将发布的 iOS 17.5 系统中加入这项提升用户隐私保护的新功能。 科技网站 9to5Mac 在苹果发布的 iOS 17.5 开发者测试版内部代码中发现了这项反跟踪功能的蛛丝马迹…

XML HTTP传输 小结

what’s XML XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据,不用于表现和展示数据,HTML 则用来表现数据。 XML 是独立于软件和硬件的信息传输工具。 应该掌握的基础知识 HTMLJavaScript…

使用pytorch构建有监督的条件GAN(conditional GAN)网络模型

本文为此系列的第四篇conditional GAN,上一篇为WGAN-GP。文中在无监督的基础上重点讲解作为有监督对比无监督的差异,若有不懂的无监督知识点可以看本系列第一篇。 原理 有条件与无条件 如图投进硬币随机得到一个乒乓球的例子可以看成是一个无监督的GAN&…

从0到1搭建文档库——sphinx + git + read the docs

sphinx git read the docs 目录 一、sphinx 1 sphinx的安装 2 本地构建文件框架 1)创建基本框架(生成index.rst ;conf.py) conf.py默认内容 index.rst默认内容 2)生成页面(Windows系统下&#xf…