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,一经查实,立即删除!

相关文章

Vscode连接WSL2当中的jupyter

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

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

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

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…

软件无线电系列——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实现缓存同步 零.读数据的标准操作 这里想说的是不管哪种模式读操作都是一样的,这是一种统一…

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

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

drawio画图编辑图形颜色

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

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);//通过代码构…

Apache-Pulsar安装操作说明

说明 Pulsar 是一种用于服务器到服务器消息传递的多租户高性能解决方案。 Pulsar 的主要特性如下&#xff1a; 对 Pulsar 实例中的多个集群的本机支持&#xff0c;并跨集群无缝地复制消息。 极低的发布和端到端延迟。 无缝可扩展至超过一百万个主题。 一个简单的客户端 API&…

解决前端精度丢失问题:后端Long类型到前端的处理策略

在Web开发中&#xff0c;我们经常遇到前后端数据类型不匹配的问题&#xff0c;特别是当后端使用大数据类型如Long时&#xff0c;前端由于JavaScript的数字精度限制&#xff0c;可能导致精度丢失。本文将深入探讨这个问题&#xff0c;并提供两种有效的解决方法。 一、问题背景 …

Java常用类与基础API--String常见算法题目

文章目录 一、面试题&#xff08;1&#xff09;题1 二、常见算法题目&#xff08;1&#xff09;题1&#xff08;2&#xff09;题2&#xff08;3&#xff09;题3&#xff08;4&#xff09;题4&#xff08;5&#xff09;题5 三、案例 一、面试题 &#xff08;1&#xff09;题1 …

2024/4/1—力扣—删除字符使频率相同

代码实现&#xff1a; 思路&#xff1a; 步骤一&#xff1a;统计各字母出现频率 步骤二&#xff1a;频率从高到低排序&#xff0c;形成频率数组 步骤三&#xff1a;频率数组只有如下组合符合要求&#xff1a; 1, 0...0n 1, n...n (, 0)n...n, 1(, 0) bool equalFrequency(char…

CVE-2024-3148 DedeCms makehtml_archives_action sql注入漏洞分析

DedeCMS&#xff08;也称为织梦CMS&#xff09;是一款基于PHPMySQL的开源内容管理系统。 在 DedeCMS 5.7.112 中发现一个被归类为严重的漏洞。此漏洞会影响某些未知文件dede/makehtml_archives_action.php的处理。操作导致 sql 注入。攻击可能是远程发起的。该漏洞已向公众披露…

【服务器uwsgi + flask + nginx的搭建】

目录 服务器uwsgi flask nginx的搭建1. 安装必要的软件2. 启动nginx服务3. 测试Nginx4. 配置uwsgi和flask5. 配置nginx 服务器uwsgi flask nginx的搭建 1. 安装必要的软件 安装Python、uWSGI、Flask 和 Nginx。 # Ubuntu 安装命令 sudo apt-get update sudo apt-get ins…

03-JAVA设计模式-建造者模式

建造者模式 什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种对象构建的设计模式&#xff0c;它允许你通过一步一步地构建一个复杂对象&#xff0c;来隐藏复杂对象的创建细节。 这种模式将一个复杂对象的构建过程与其表示过程分离&#xff0c;使得…