PyTorch学习笔记|张量的线性代数运算

PyTorch中并未设置单独的矩阵对象类型,因此PyTorch中,二维张量就相当于矩阵对象,并且拥有一系列线性代数相关函数和方法。

矩阵的形变及特殊矩阵构造方法

go 复制代码
t1 = torch.arange(1, 7).reshape(2, 3).float()
torch.t(t1)

t = torch.arange(4)
torch.diag(t)

torch.triu(t1)
torch.tril(t1)

矩阵的基本运算

dot只能作用于一维张量。

go 复制代码
t = torch.arange(1, 4)
torch.dot(t,t)

t1 = torch.arange(1,7).reshape(2,3)
t2 = torch.arange(1,10).reshape(3,3)
torch.mm(t1, t2)

t3 = torch.arange(1,13).reshape(3,2,2)
t4 = torch.arange(1,19).reshape(3,2,3)
torch.bmm(t3, t4)

torch.addmm(t, t1, t2)

矩阵的线性代数运算

矩阵的迹运算比较简单,就是矩阵对角线元素之和。

go 复制代码
A = torch.tensor([[1., 2],[4, 5]])
torch.trace(A)

#
tensor(6.)

矩阵的秩(rank),是指矩阵中行或列的极大线性无关数,且矩阵中行、列极大无关数总是相同的,任何矩阵的秩都是唯一值,满秩指的是方阵(行数和列数相同的矩阵)中行数、列数和秩相同,满秩矩阵有线性唯一解等重要特性,而其他矩阵也能通过求解秩来降维,同时,秩也是奇异值分解等运算中涉及到的重要概念。

go 复制代码
torch.linalg.matrix_rank(A)
# tensor(2)

行列式其实就是一个数,通过行列式的计算,我们能够知道矩阵是否可逆,从而可以进一步求解矩阵所对应的线性方程。

go 复制代码
torch.det(A)
# tensor(-3.)

矩阵求逆矩阵我们用一个简单的线性回归来讲解,点(1,2)和点(3,4),我们用一条线来拟合,其实就是求这个方程y=ax+b。

我们来看看矩阵怎么表达上面这个形式。

因此我们可以通过求逆矩阵来计算x。

我们来看一下代码。

go 复制代码
A = torch.tensor([[1.0,1],[3,1]])
B = torch.tensor([2.0,4])
torch.mv(torch.inverse(A), B)

# result
tensor([1., 1.])

所以结果就是y = x+1

当然也可以使用最小二乘法直接算出来。

go 复制代码
torch.linalg.lstsq(A, B.reshape(2,1))
# result
torch.return_types.linalg_lstsq(
solution=tensor([[1.0000],
        [1.0000]]),
residuals=tensor([]),
rank=tensor(2),
singular_values=tensor([]))
相关推荐
sin°θ_陈2 小时前
行业调研——XGRIDS (其域创新):空间数据生产、资产化与工业工作流的真正价值
经验分享·笔记·深度学习·3d·金融·3dgs·空间智能
骇客野人2 小时前
本地大模型与知识库的融合实施方案
人工智能
1941s2 小时前
Google Agent Development Kit (ADK) 指南 第三章:核心概念与架构
人工智能·python·langchain·agent·adk
码农小白AI2 小时前
AI审核驱动下的IACheck:港口沉积物检测报告如何实现质量稳步提升
人工智能
2501_948114242 小时前
OpenClaw 时代的多模型接入实战:当开源智能体遇上聚合网关,一个人如何跑通全自动生产流水线
人工智能·gpt·开源
中电金信2 小时前
中电金信助力腾讯安全多模态智能鉴伪系统上线
人工智能
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章40-特征找图
图像处理·人工智能·opencv·算法·计算机视觉
油泼辣子多加2 小时前
【DL】Transformer算法应用
人工智能·深度学习·算法·机器学习·transformer
fof9202 小时前
Base LLM | 从 NLP 到 LLM 的算法全栈教程 第二天
人工智能·算法·自然语言处理