Pytorch张量的数学运算:向量基础运算

news2024/11/16 22:28:09

文章目录

      • 一、简单运算
      • 二、广播运算
        • 1.广播的基本规则
        • 2.广播操作的例子
      • 三、运算函数

参考:与凤行

  张量的数学运算是深度学习和科学计算中的基础。张量可以被视为一个多维数组,其在数学和物理学中有广泛的应用。这些运算包括但不限于加法、减法、乘法、除法、内积、外积、张量积、索引、切片以及各种变换等。运算的结果都是一个张量。 一维张量被称作向量。 下面,我们会详细介绍这些基础运算。

一、简单运算

import torch
tensor1=torch.tensor([1,2,3,4,5])
tensor2=torch.tensor([5,4,3,2,1])
  • 1.加法+
    • 对应位置的元素相加
    • 要求参与运算的张量形状相同
print("加法结果:",tensor1+tensor2)

在这里插入图片描述

  • 2.减法-
    • 对应位置的元素相减
    • 要求参与运算的张量形状相同
print("减法结果:",tensor1-tensor2)

在这里插入图片描述

  • 3.逐元素乘法*
    • 对应位置的元素相乘
    • 要求参与运算的张量形状相同
print("乘法结果:",tensor1*tensor2)

在这里插入图片描述

  • 3.逐元素除法/
    • 对应位置的元素相除
    • 要求参与运算的张量形状相同
print("除法结果:",tensor1/tensor2)

在这里插入图片描述

  • 5.数乘,标量乘法*
    • 标量乘以张量的每一个元素
print("数乘结果:",2*tensor1)
print("数乘结果:",2*tensor2)

在这里插入图片描述

  • 6.点积@
    • 和数学上向量的点积效果一致
    • 用于计算两个矩阵乘法 或 向量的点积
    • 要求参与运算的张量形状相同
print("点积结果:",tensor1@tensor2)

在这里插入图片描述

二、广播运算

  广播(Broadcasting)是一种在不同形状的数组(张量)之间进行数学运算的方法,它允许逐元素操作自动扩展到不匹配的数组形状,无需显式复制数据。广播规则可以简化数组操作,使代码更简洁,同时提高运算效率。这在NumPy、TensorFlow、PyTorch等科学计算和深度学习库中非常常见。

1.广播的基本规则

广播遵循以下三条规则:

  1. 规则1:如果两个数组的维数不相同,那么小维度数组的形状将会在最左边补1。

    举例来说,如果你有一个256×256×3的数组(比如一张256x256像素的彩色图像,3表示颜色通道)和一个3的数组(表示每个颜色通道的缩放因子),那么这个小维度数组的形状会在最左边补1直到两个数组的维数相同,即小数组的形状会被视为1 ×1 × 3。

  2. 规则2:对于每个维度,如果一个数组的大小在该维度上为1,而另一个数组的大小在该维度上大于1,那么首先数组会在该维度上扩展以匹配另一个数组的大小。

    继续上面的例子,1 ×1 × 3的数组在前两个维度上大小为1,会被扩展为与另一个数组在这些维度上的大小相同,即扩展为256×256×3。

  3. 规则3:如果在所有维度上,大小匹配或其中一个数组的大小为1,则认为它们是兼容的。如果在某个维度上,两个数组的大小既不相等也不是其中一个为1,则会抛出异常,因为它们被认为是不兼容的。

    在规则1和规则2的帮助下,大部分时候数组都能够兼容。但如果两个数组在某个维度上都不为1且不相等,比如一个形状为(2,3)的数组和一个形状为(3,3)的数组,那么它们就无法通过广播兼容。

2.广播操作的例子

假设我们有一个4×3的矩阵A,想要逐元素加上一个长度为3的向量v,即对A的每一行都加上v。按照传统方法,我们可能需要通过循环来实现;但利用广播,这个操作可以自动完成。

import torch
tensor1=torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
tensor2=torch.tensor([1, 0, 1])
# A是一个4x3的矩阵,v是一个长度为3的向量

# 通过广播,将v加到A的每一行上
 # 利用广播,无需显式扩展v的形状
print("广播加法结果:\n",tensor1+tensor2)
print("广播乘法结果:\n",tensor1*tensor2)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里,v的形状被自动扩展到与A一致,实际上相当于v被复制成了一个4×3的矩阵,然后与A进行逐元素相加。

三、运算函数

import torch
tensor1=torch.tensor([1,2,3,4,5])
tensor2=torch.tensor([5,4,3,2,1])
  • 加法torch.add()
    • 和直接加法是一样效果的,直接加法进行了函数重载而已。
print("加法结果:",torch.add(tensor1,tensor2))

在这里插入图片描述

  • 减法torch.sub()
print("减法结果:",torch.sub(tensor1,tensor2))

在这里插入图片描述

  • 乘法torch.mul()
print("乘法结果:",torch.mul(tensor1,tensor2))

在这里插入图片描述

  • 除法torch.div()
print("除法结果:",torch.div(tensor1,tensor2))

在这里插入图片描述

  • 点积torch.dot()
    • 和数学上向量的点积效果一致
    • 用于计算两个一维张量的点积
    • 要求参与运算的张量形状相同
print("点积结果:",torch.dot(tensor1,tensor2))

在这里插入图片描述

  • 高维张量的点积torch.matmul()

    • 用于计算矩阵乘法
  • 外积torch.cross()

    • 外积(叉积)是定义在两个三维向量上的二元运算,结果是一个向量,而不是点积的标量结果。外积的结果向量垂直于原来的两个向量(假设两个原向量不平行),并遵循右手规则(即当你的右手的四指从第一个向量通过最短角度旋转到第二个向量时,你的大拇指指向的方向就是外积向量的方向)。
    • 和数学上的外积一样
    • 长度是原始向量 a 和 b 构成的平行四边形的面积。
import torch
tensor1=torch.tensor([1,2,3])
tensor2=torch.tensor([4,5,6])
print("外积结果:",torch.cross(tensor1,tensor2))

在这里插入图片描述

  • 范数torch.norm()
    • norm默认计算L2范数(欧几里得距离)。
    • vector_norm: Expected a floating point or complex tensor as input.(期望一个浮点或复数张量作为输入)
import torch
x = torch.tensor([1.0, -2.0, 3.0])
#等价于x = torch.tensor([1, -2, 3],dtype=torch.float)
# 计算L1范数
l1_norm = torch.norm(x, p=1)
print("L1 norm:", l1_norm)
# 计算L2范数
l2_norm = torch.norm(x, p=2)#等价于l2_norm = torch.norm(x)
print("L2 norm:", l2_norm)
# 计算无穷范数
inf_norm = torch.norm(x, p=float('inf'))
print("Infinity norm:", inf_norm)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

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

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

相关文章

摄影用光这点事儿,摄影光线运用技法

一、资料描述 本套摄影用光资料,大小1.89G,共有60个文件。 二、资料目录 《10日掌握摄影用光》李俊.全彩版.pdf 《DSLR闪光灯摄影完全探索》.pdf 《Light Science and Magic》.pdf 《等待光线》戴维诺顿风光摄影手记.pdf 《高调人像摄影的布光经验…

2024年面试AI编译器岗经验总结

面试经历: 面试中必备的知识: 1.用C++实现一个卷积 (图解)一步一步使用CPP实现深度学习中的卷积 - GiantPandaCVGiantPandaCVhttp://giantpandacv.com/academic/%E7%AE%97%E6%B3%95%E7%A7%91%E6%99%AE/%E5%B0%BD%E8%A7%88%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E…

C语言 循环控制——嵌套循环

目录 循环实现累加累乘 嵌套循环的设计 输出九九乘法表 循环实现累加累乘 嵌套循环的设计 输出九九乘法表

GIt 删除某个特定commit

目的 多次commit,想删掉中间的一个/一些commit 操作方法 一句话说明:利用rebase命令的d表示移除commit的功能,来移除特定的commit # 压缩这3次commit,head~3表示从最近1次commit开始,前3个commit git rebase -i head~3rebase…

Redis 5种数据结构常用命令

文章目录 1 字符串2 哈希3 列表4 集合5 有序集合 1 字符串 命令描述set key value设置指定key的值为valueget key获取指定key的值del key [key …]删除一个或多个keymset key value [key value …]设置多个key的值mget key [key …]获取一个或多个key的值incr key将key中储存的…

考研数学|怎样刷题更有效率?这些坑千万别踩!

考研数学刷题的这些困扰相信大部分的同学都是有的,为此我整理了一些提高考研数学刷题效率的方法和策略,希望能帮助你更有效地学习和解题。 首先要制定合理的刷题计划,首先遵循“教材→视频→全书或辅导讲义→习题集→真题→专项训练→模拟套…

基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“汽车租赁系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 管理员登录界面图 管理员功能界面…

vue广告悬浮框,页面来回移动,鼠标放上停止,离开移动

1.dom <div class"popup-dialog" id"popupDialog" mouseover"onMmouseover" mouseout"onMouseout"><p>vue广告悬浮</p></div>2.js mounted() {this.initPopup();},beforeDestory() {if (this.times) {clearIn…

k8s CNI Calico 网络模式总结【建议收藏】

目录 calico架构图 ​编辑 IPIP模式下的架构图 calico 核心组件 Overlay 网络模式&#xff1a; Vxlan IPIP IpCrossubnet Pod IP对外暴露 不对外暴露&#xff1a; 实现对外暴露的方法&#xff1a; overlay模式下的网络MTU Iptables & ipvs Full-mesh o…

工程中实践的微服务设计模式

大家好&#xff0c;我是 方圆。最近在读《微服务架构设计模式》&#xff0c;开始的时候我非常的好奇&#xff0c;因为在我印象中&#xff0c;设计模式是常说的那23种设计模式&#xff0c;而微服务的设计模式又是什么呢&#xff1f;这个问题也留给大家&#xff0c;在文末我会附上…

【第二十篇】使用BurpSuite实现SSRF(实战案例)

SSRF漏洞:向服务器发送伪造请求即可访问或操作服务器上的资源。 假设一个网站http://ice.com,允许用户输入一个URL,然后在服务器端通过发起HTTP请求来获取该URL的内容并显示给用户。如果网站没有对URL进行验证,通过输入 http://ice/admin ,即可获取到内部系统的敏感信息,…

【数据结构】考研真题攻克与重点知识点剖析 - 第 3 篇:栈、队列和数组

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

【学习笔记】Elsevier的Latex模板文件(附网址)

注&#xff1a;这是一篇没有技术含量的水文&#xff0c;主要是看有人下载下来&#xff0c;居然当成资源需要积分才能下载。我觉得不行&#xff0c;故提供原始下载地址供查阅使用。 链接: 上述图片所示网址&#xff1a;链接直达

Kubernetes学习笔记8

Kubernetes集群客户端工具kubectl 我们已经能够部署Kubernetes了&#xff0c;那么我们如何使用Kubernetes集群运行企业的应用程序呢&#xff1f;那么&#xff0c;我们就需要使用命令行工具kubectl。 学习目标&#xff1a; 了解kubectl 命令帮助方法 了解kubectl子命令使用分…

C++如何分开配release和debug版本编译环境

右键当前文件->属性。 在下拉栏目中找到release和dubug分别进行配置。

【qml】 在QML场景图中使用QPainter 的方法

【qml】 在QML场景图中使用QPainter 的方法_qquickpainteditem-CSDN博客 QQuickPaintedItem 1.官方资料 QQuickPaintedItem类提供了一种在QML场景图中使用QPainter API的方法。 QQuickPaintedItem使QPainter API与QML场景图一起使用成为可能。它在场景图中设置了一个纹理矩…

【Spring Cloud Alibaba】9 - OpenFeign集成Sentinel实现服务降级

目录 一、简介Sentinel 是什么如何引入Sentinel 二、服务搭建1.安装Sentinel控制台1.1 下载1.2 启动1.3 访问 2.改造服务提供者cloud-provider服务2.1 引入依赖2.2 添加API2.3 添加配置文件 3.改造cloud-consumer-feign服务3.1 引入依赖3.2 添加Feign接口3.3 添加服务降级类3.4…

InnoDB 数据页结构

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1&#xff09;建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…

卫星遥感影像如何选择合适的分辨率

​ 卫星遥感影像的分辨率是影响其应用效果的关键因素之一。分辨率越高&#xff0c;所获取的图像细节越丰富&#xff0c;能够更准确地反映地物的特征和变化。因此&#xff0c;在选择卫星遥感影像时&#xff0c;需要根据实际需求和数据可获取性来选择合适的分辨率。 一、分辨…

大语言模型上下文窗口初探(下)

由于篇幅原因&#xff0c;本文分为上下两篇&#xff0c;上篇主要讲解上下文窗口的概念、在LLM中的重要性&#xff0c;下篇主要讲解长文本能否成为LLM的护城河、国外大厂对长文本的态度。 3、长文本是护城河吗&#xff1f; 毫无疑问&#xff0c;Kimi从一开始就用“长文本”占领…