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([]))
相关推荐
ASKED_20191 分钟前
从 Chat Completions 到 Agent Runtime:主流大模型接口协议全景与设计对比
人工智能
站长工具箱5 分钟前
讯飞Loomy测评:整合飞书钉钉QQ消息的AI自动办公工具深度体验
人工智能·钉钉·飞书
小刘快学习6 分钟前
广告素材生产,直连模型还是走聚合网关
人工智能
Wang's Blog11 分钟前
AI Agent白手起家46: LangChain 向量数据库实战 — 从增删查到高级检索
人工智能
QYR_Jodie16 分钟前
高增赛道爆发!2026-2032工业制冷市场分析:预计2032年将达到174.4亿美元
大数据·人工智能·市场报告
戴西软件20 分钟前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
十三画者25 分钟前
【文献分享】CANVAS:基于细胞构架与邻域信息的组织病理学虚拟空间肿瘤分析
人工智能·机器学习·数据挖掘·数据分析·数据可视化
燕卫博26 分钟前
借助AI的力量,将 ZYNQ 开发板改造成一个虚拟专用网络网关
人工智能·串口·嵌入式·zynq·reasonix·ser2mcp
sunneo30 分钟前
每周精选GitCode开源项目
人工智能
sinovoip32 分钟前
香蕉派BPI-M7S开源单板计算机采用瑞芯微RK3588s芯片设计,与树莓派产品尺寸一样
人工智能·开源·业界资讯