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

文章目录

      • 一、简单运算
      • 二、广播运算
        • 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.mzph.cn/news/799005.shtml

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

相关文章

TLS是什么,为什么TLS1.0不安全

什么是TLS TLS,全名为 Transport Layer Security,即传输层安全协议。它是一种加密协议,用于在互联网上提供安全和数据完整性保证。TLS 的前身是 SSL(Secure Sockets Layer,安全套接字层协议),由…

提升网络传输性能的误区

客机坠毁始终是种灾难,理论上至少存在 100 种不让客机坠毁的方案,其中之一是携带一个巨大的降落伞(合计展开面积 6000 平米),该方案涉及包括材料学,力学等,用最轻的材料做展开面积最大的降落伞,当客机要坠毁…

Vscode连接WSL2当中的jupyter

主要解决办法参考自这篇博客 1. 在WSL当中安装jupyter 这个随便找一篇博客即可,比如这篇,也可以根据现有的环境参考其它博客内容 2. 使用jupyter创建一个虚拟环境 首先激活想要添加的虚拟环境后,输入命令安装库: pip install ipykernel …

企业级开源路由系统VyOS-构建和使用

介绍 VyOS是一个基于Linux的企业级路由器操作系统,被许多公司和个人用来驱动物理网络设备,如路由器和防火墙。它有一个统一的命令行界面来管理其所有的网络相关功能(和Juniper Junos操作很像)。VyOS使用Debian GNU/Linux作为其基…

每天学习一个Linux命令之nc

每天学习一个Linux命令之nc 简介 nc(netcat)是一种用于TCP/IP和UDP协议的通信工具。在Linux系统下,nc命令提供了丰富的选项,使其具备了很多强大的功能。本文将详细介绍nc命令的各种选项及其使用方法。 命令选项 以下是nc命令的…

HTTP 常见的状态码以及其适用场景

是什么 HTTP状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的3位数字代码 它由 RFC 2616规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774与 RFC 4918等规范扩展 简单来讲&#…

文件输入/输出流(I/O)

文章目录 前言一、文件输入\输出流是什么?二、使用方法 1.FileInputStream与FileOutputStream类2.FileReader与FileWriter类总结 前言 对于文章I/O(输入/输出流的概述),有了下文。这篇文章将具体详细展述如何向磁盘文件中输入数据,或者读取磁…

全面解析十七种数据分析方法,具象数据分析思维

一、介绍 在当今数据驱动的商业环境中,数据分析已经成为了企业获取竞争优势的关键工具。无论是为了优化运营效率,提高客户满意度,还是推动产品创新,企业都需要通过分析大量数据来做出明智的决策。数据分析方法多种多样&#xff0c…

【云开发笔记No.20】中台架构的分类

中台现在成了一个到处都在说的词了,甚至在组织架构中,弄几个万金油,也说有了一个中台支撑部门。一方面是滥用,另一个方面,也说明确实有它的作用和意义。 在云计算和数字化转型日益盛行的今天,中台架构已成…

软件无线电系列——CIC滤波器

本节目录 一、CIC滤波器 1、积分器 2、梳状滤波器 3、CIC滤波器的特性 二、单级CIC和多级CIC滤波器本节内容 一、CIC滤波器 CIC滤波器,英文名称为Cascade Integrator Comb,中文全称为级联积分梳状滤波器,从字面来看就是将积分器与梳状滤波器…

《云原生安全攻防》-- 云原生应用风险分析

为了满足每位朋友的学习需求,并且支持课程的持续更新,本系列课程提供了免费版和付费视频版两种方式来提供课程内容。我们会持续更新课程内容,以确保内容的度和实用性。 在本节课程中,我们将一起探讨云原生应用在新的架构模式下可能…

怎么保证缓存与数据库的最终一致性?

目录 零.读数据的标准操作 一.Cache aside Patten--旁路模式 二.Read/Write Through Pattern--读写穿透 三.Write Back Pattern--写回 四.运用canal监听mysql的binlog实现缓存同步 零.读数据的标准操作 这里想说的是不管哪种模式读操作都是一样的,这是一种统一…

自动化分享----pywinauto

在遇到一些特殊的情况的时候,selenium框架已经无法满足我们的需求了,比如:网站做了自动化屏蔽的时候,会检测到selenium并对操作者进行屏蔽。 经过测试发现pywinauto属于电脑的模拟,当然还有其他的库,不过我…

蓝桥杯刷题-09-三国游戏-贪心⭐⭐⭐

蓝桥杯2023年第十四届省赛真题-三国游戏 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i 个事件发生时会分别让 X, Y,…

drawio画图编辑图形颜色

drawio画图编辑图形颜色 团队的安全第一图表。将您的存储空间带到我们的在线工具中,或使用桌面应用程序进行本地保存。 1.安装准备 1.1安装平台 多平台 1.2在线使用 浏览器打开网页使用 1.3软件下载 drawio官网github仓库下载 2.在浏览器的网页中使用drawio…

git开源平台测评报告如何编写

编写Git开源平台测评报告时,可以按照以下步骤和结构进行: 一、引言 在引言部分,简要介绍Git开源平台的基本情况和本次测评的目的。可以提及Git在版本控制领域的广泛应用和重要性,以及本次测评旨在评估Git平台的性能、易用性、安…

Mac 每次重启终端都要重新配置mysql环境变量解决办法

1、问题 Mac 每次关闭终端后,mysql环境配置就失效了,需要重新配置mysql环境变量 2、解决方法 在 " ~/.zshrc "文件添加" source ~/.bash_profile "即可 vim ~/.zshrc source ~/.bash_profile 3、验证 退出终端后重新打开终端 mys…

提取COCO数据集中特定的类—vehicle 4类

提取COCO数据集中特定的类—vehicle 4类 1 安装pycocotools2 下载COCO数据集3 提取特定的类别4 多类标签合并 1 安装pycocotools pycocotools github地址 pip install githttps://github.com/philferriere/cocoapi.git#subdirectoryPythonAPI2 下载COCO数据集 COCO官网下载2…

QT C++(QT对象树与内存泄漏管理,QT中文乱码问题)

文章目录 1. QT对象树与内存泄漏2. QT中文乱码 1. QT对象树与内存泄漏 #include "widget.h" #include "ui_widget.h" #include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//通过代码构…

MongoDB聚合运算符:$minN(用于数组)

文章目录 语法使用举例 $minN聚合运算符返回数组中最小的n个值。 语法 { $minN: { n: <expression>, input: <expression> } }参数说明&#xff1a; n&#xff1a;正整数表达式&#xff0c;用于指定返回数组元素的数量。input&#xff1a;可以解析为数组的表达式…