Pytorch张量的数学运算:矩阵运算

文章目录

    • 一、基础运算
    • 二、矩阵的特殊运算
      • 1、矩阵的转置
        • 1.1、语法
        • 1.2、示例
          • 1.2.1、二维矩阵转置
          • 1.2.2、更高维度的张量转置
      • 2、方阵的行列式
        • 2.1、计算行列式
        • 2.2、示例:使用PyTorch计算行列式
      • 3、方阵的迹
      • 4、方阵的逆
        • 4.1、计算矩阵的逆
        • 4.2、使用PyTorch计算逆矩阵

  二维张量又被称为矩阵。
  对于矩阵的运算有加、减、逐元素乘、数乘、点积(矩阵乘法)、逐元素除、转置、逆、行列式。向量的点积(也称为内积或标量积)和矩阵的点积(通常指矩阵乘法)在数学上有不同的定义和用途,因此它们的计算方式也不相同。

一、基础运算

  • 加法:矩阵的形状必须相同或者满足广播要求
  • 减法:矩阵的形状必须相同或者满足广播要求
  • 乘法(逐元素乘):矩阵的形状必须相同或者满足广播要求
  • 除法:矩阵的形状必须相同或者满足广播要求
  • 数乘
  • 矩阵乘法:必须满足线性代数的矩阵乘法
import torch
matrix1=torch.tensor([[1,2,3],[1,2,3]])
matrix2=torch.tensor([[3,2,1],[3,2,1]])
matrix3=torch.tensor([[1,2],[1,2],[1,2]])
print("乘法结果:",matrix1*matrix2)
print("加法结果:",matrix1+matrix2)
print("减法结果:",matrix1-matrix2)
print("除法结果:",matrix1/matrix2)
print("数乘结果:",matrix1*10)
print("矩阵乘法结果:",matrix1@matrix3)#2×3 @ 3×2
print("矩阵乘法结果:",torch.matmul(matrix1,matrix3))#2×3 @ 3×2

在这里插入图片描述

二、矩阵的特殊运算

  • 在PyTorch中,torch.transpose 函数是用来转置矩阵
  • 在PyTorch中,可以使用torch.det()函数计算方阵的行列式。
  • 在PyTorch中,可以使用torch.trace()函数计算方阵的迹。
  • 在PyTorch中,可以使用torch.inverse()函数计算方阵的逆。

1、矩阵的转置

在PyTorch中,torch.transpose 函数是用来转置矩阵或者更高维度的张量(Tensor)的。它可以交换张量的两个维度,对于二维张量(矩阵)来说,这等同于常规的矩阵转置操作。

  • torch.transpose对于二维张量(矩阵)来说,通常用于行列交换,等同于矩阵的转置操作。
  • 在处理多于两维的张量时,torch.transpose提供了灵活性,可以选择任意两个维度进行交换。
  • 如果需要对多维张量进行多次维度交换,可能会使用torch.permute,它允许一次性重新排列多个维度。
1.1、语法

函数的基本语法如下:

torch.transpose(input, dim0, dim1)
  • input:要转置的输入张量。
  • dim0:要交换的第一个维度。
  • dim1:要交换的第二个维度。
1.2、示例

让我们看一些torch.transpose的使用示例:

1.2.1、二维矩阵转置

对于一个二维张量(矩阵),torch.transpose(matrix,0,1) 可以将其行和列交换。

import torch# 创建一个2x3的矩阵
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("Original matrix:\n", x)# 转置矩阵
y = torch.transpose(x, 0, 1)
print("Transposed matrix:\n", y)

这将输出:

Original matrix:tensor([[1, 2, 3],[4, 5, 6]])
Transposed matrix:tensor([[1, 4],[2, 5],[3, 6]])
1.2.2、更高维度的张量转置

对于三维或更高维度的张量,torch.transpose可以用来交换任意两个维度。这很抽象,我们只需要关注矩阵的就行。

# 创建一个3x2x2的张量
x = torch.rand(3, 2, 2)
print("Original tensor shape:", x.shape)# 交换第一个维度和第二个维度
y = torch.transpose(x, 0, 1)
print("Transposed tensor shape:", y.shape)

这将输出形状变化的信息,例如,如果原始张量形状是(3, 2, 2),转置后的张量形状会是(2, 3, 2)

2、方阵的行列式

行列式 det(A),是一个将 方阵 A 映射到实数的函数。矩阵的行列式是一个标量值,它提供了矩阵(线性变换)的一些重要性质的信息。对于一个方阵(即行数和列数相等的矩阵),其行列式可以通过多种方法计算,包括拉普拉斯展开、行列式的定义,或者更实用的方法,如LU分解。

行列式有几个重要的性质和几何意义:

  1. 非奇异性:一个矩阵是非奇异的(即可逆的)当且仅当其行列式不为零。
  2. 体积缩放因子:在几何上,一个方阵的行列式告诉我们,由该矩阵表示的线性变换改变了空间的多少倍体积。 如果行列式为1,意味着体积保持不变;如果行列式为负,意味着除了缩放,还进行了一个镜像反转。
  3. 行列式的乘积性:两个矩阵乘积的行列式等于这两个矩阵行列式的乘积,即det(AB) = det(A)· det(B)。
2.1、计算行列式

在PyTorch中,可以使用torch.det()函数计算方阵的行列式。

  • .det: Expected a floating point or complex tensor as input.
2.2、示例:使用PyTorch计算行列式
import torch# 创建一个2x2的矩阵
A = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)# 计算行列式
det_A = torch.det(A)
print(det_A)

输出:

tensor(-2.)

3、方阵的迹

方阵 A 的迹:对角线元素之和,通常表示为Tr(A)
在PyTorch中,可以使用torch.trace()函数计算方阵的迹。

import torch# 创建一个2x2的矩阵
A = torch.tensor([[1, 2], [3, 4]])# 计算迹
Tr_A = torch.trace(A)
print(Tr_A)

输出:

tensor(5)

4、方阵的逆

矩阵的逆是线性代数中的一个重要概念,对于给定的方阵A,如果存在另一个方阵 B 使得 AB = BA = I,其中 I 是单位矩阵,则称 B 为 A 的逆矩阵。单位矩阵 I 是一个主对角线上所有元素都为1,其余元素都为0的方阵。

4.1、计算矩阵的逆

计算矩阵的逆可以通过多种方法实现,包括代数余子式法(对于小的矩阵)、高斯消元法或LU分解等。在计算机中,通常使用数值稳定的算法来计算较大矩阵的逆。

4.2、使用PyTorch计算逆矩阵

在PyTorch中,可以使用torch.inverse()函数计算方阵的逆。

import torch
A = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
A_inv = torch.inverse(A)
print(A_inv)

这将输出矩阵 A 的逆:

tensor([[-2.0000,  1.0000],[ 1.5000, -0.5000]])

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

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

相关文章

若依 ruoyi-vue 接口挂载获取Resources静态资源文件权限校验

解决小程序图片打包过大,放置后端,不引用ngnix、minio等组件,还能进行权限校验 package com.huida.web.controller.common.app;import com.huida.common.core.controller.BaseController; import com.huida.common.utils.file.FileUtils; imp…

vulhub之fastjson篇-1.2.27-rce

一、启动环境 虚拟机:kali靶机:192.168.125.130/172.19.0.1(docker地址:172.19.0.2) 虚拟机:kali攻击机:192.168.125.130/172.19.0.1 本地MAC:172.XX.XX.XX 启动 fastjson 反序列化导致任意命令执行漏洞 环境 1.进入 vulhub 的 Fastjson 1.2.47 路径 cd /../../vulhub/fa…

蓝桥杯刷题-12-公因数匹配-数论(分解质因数)不是很理解❓❓

蓝桥杯2023年第十四届省赛真题-公因数匹配 给定 n 个正整数 Ai&#xff0c;请找出两个数 i, j 使得 i < j 且 Ai 和 Aj 存在大于 1 的公因数。 如果存在多组 i, j&#xff0c;请输出 i 最小的那组。如果仍然存在多组 i, j&#xff0c;请输出 i 最小的所有方案中 j 最小的那…

PP-Structure 文档分析

本文接着上一篇文章&#xff1a;PaddleOCR环境搭建、模型训练、推理、部署全流程&#xff08;Ubuntu系统&#xff09;-CSDN博客 主要包括以下几种&#xff1a; PP-Structure 文档分析 --官方地址 1.1版面分析和表格识别1.2版面恢复1.3关键信息抽取 1. 简介 PP-Structu…

vue3+element-ui-plus的el-tree组件实现复选框形式下的单选功能,且禁用父级

实现效果图&#xff0c;一二级都是灰色的不可选&#xff0c;三级只能同时选中一个 <el-treev-model"selectedNode":data"deptOptions":props"{ label: title, children: children }" //自定义名称和子集的字段:render-after-expand"fal…

12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?归并排序和快速排序

 下载APP  12 | 排序&#xff08;下&#xff09;&#xff1a;如何用快排思想在O(n)内查找第K大元素&#xff1f; 2018-10-17 王争数据结构与算法之美进入课程 讲述&#xff1a;修阳 时长21:58大小8.81M  上一节我讲了冒泡排序、插入排序、选择排序这三种排序算法&…

2024/4/2—力扣—栈的最小值

代码实现&#xff1a; typedef struct node {int val;struct node *next; } Node;typedef struct {struct node *top;int min; } MinStack;/** initialize your data structure here. */MinStack* minStackCreate() {MinStack *obj malloc(sizeof(*obj));obj->top NULL;ob…

爬虫 新闻网站 以湖南法治报为例(含详细注释) V1.0

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff…

【Java集合进阶】泛型的通配符和综合练习

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(七)- 向量算术指令格式

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

Mysql底层原理六: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…

怎么将静图变成gif?告诉你三步快速制作

想要将jpg格式的静图变成gif格式的动图时要怎么操作呢&#xff1f;在这个飞速发展的数字媒体时代&#xff0c;经常会在网络上分享有趣的动态图片。当我们想要将自己手中的jpg图片变成gif动图的时候怎么实现呢&#xff1f;很简单&#xff0c;通过使用gif图片制作&#xff08;htt…

windows环境下实现ffmpeg本地视频进行rtsp推流

摘要&#xff1a;有时候服务端&#xff08;如linux&#xff09;或者边缘端&#xff08;jetson盒子&#xff09;需要接受摄像头的视频流输入&#xff0c;而摄像头的输入视频流一般为rtsp&#xff0c;测试时需要搭建摄像头环境&#xff0c;很不方便&#xff0c;因此需要对本地视频…

YOLOV8注意力改进方法:DoubleAttention(附代码)

原论文地址&#xff1a;原论文地址 DoubleAttention网络结构的优点在于&#xff0c;它能够有效地捕获图像中不同位置和不同特征的重要性&#xff0c;从而提高了图像识别和分割的性能。 论文相关内容介绍&#xff1a; 论文摘要&#xff1a;学习捕捉远程关系是图像/视频识别的…

springboot系列-api接口请求实现

springboot HTTP请求接口实现 基于springboot 2.6.6 代码地址&#xff1a;github仓库地址 更多系列教程请关注公众号’coderlike’ 如果觉得有帮助希望能关注下公众号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…

Elasticsearch索引之嵌套类型:深度剖析与实战应用

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Elasticsearch是一个基于Lucene的搜索服务器&#xff0c;它提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;并带有一个基…

烧坏两块单片机,不知道原因?

没有看你的原理图&#xff0c;以下是造成烧毁芯片的几个环节&#xff1a; 1. 最大的可能性是你的单片机电机控制输出与电机驱动电路没有隔离。 我的经验&#xff0c;使用STM32控制电机&#xff0c;无论是直流电机脉宽调制&#xff0c;还是步进电机控制&#xff0c;控制电路与…

PCA算法(Principal Component Analysis)揭秘

经典PCA算法 PCA算法的应用包括降维、有损数据压缩、特征抽取、数据可视化等。目前PCA算法有两个通用定义&#xff0c;能殊途同归&#xff0c;得到相同的结果。一方面&#xff0c;我们可以用正交投影来定义PCA&#xff0c;即将数据投影到更低维的线性子空间&#xff0c;也被称…

DolphinScheduler 答案整理,最新面试题

DolphinScheduler的架构设计是怎样的&#xff1f; DolphinScheduler的架构设计主要分为四个层次&#xff1a;前端界面层、API服务层、调度层和执行层。 1、前端界面层&#xff1a; 提供任务的定义、流程的设计、监控等功能&#xff0c;用户通过前端界面操作整个系统。 2、AP…

“揭秘循环购模式:快消品行业复购利器

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发与商业模式设计的公司。我们的核心业务是构建商城系统&#xff0c;并为各企业提供全方位的商业模式解决方案。至今&#xff0c;我们已经成功打造了超过两百种独特的商业模式&#xff0c;助力众多企业实现商业目标…