PyTorch 线性代数运算完整总结
核心概念 PyTorch 线性代数运算完整总结,涵盖矩阵运算、向量运算、分解、范数等操作。
1. 基础核心:张量 Tensor(线性代数载体)
PyTorch 全部向量/矩阵运算基于 torch.Tensor,GPU/CPU 无缝切换,对标 numpy,专为深度学习梯度设计。
1.1. 创建向量、矩阵
import torch
# 向量(一维张量)
x = torch.tensor([1.0, 2, 3])
# 矩阵(二维)
A = torch.tensor([[1, 2], [3, 4]])
# 随机矩阵、零矩阵、单位矩阵
rand_mat = torch.randn(3,3)
zero_mat = torch.zeros(2,2)
eye3 = torch.eye(3) # 3阶单位矩阵
2. 基础标量、逐元素运算(Element-wise)
符号直接 + - * / **,对应位置元素计算,不是矩阵乘法
- 加减:
A + B/torch.add(A,B) - 逐元素乘:
A * B/torch.mul(A,B) - 逐元素除:
A / B - 逐元素幂:
A ** 2平方
3. 矩阵乘法(线性代数核心,区分3种)
3.1. 标准矩阵乘法(矩阵×矩阵 / 矩阵×向量)
数学:A_{m\times k} \cdot B_{k\times n}=C_{m\times n}
# 写法1(推荐)
C = torch.matmul(A, B)
# 写法2 运算符 @
C = A @ B
# 写法3
C = torch.mm(A,B) # 仅支持2维矩阵,不兼容一维向量
3.2. 向量内积(点积 x\cdot y)
x = torch.tensor([1,2,3])
y = torch.tensor([4,5,6])
dot = torch.dot(x, y) # 仅一维向量
3.3. 批量矩阵乘(高维张量,深度学习常用)
torch.bmm():批量3维张量 [batch, m, k] @ [batch, k, n]
4. 矩阵基础变换
- 转置 A^T
A.T
torch.t(A)
- 逆矩阵 A^{-1}(方阵可逆)
A_inv = torch.inverse(A)
# A @ A_inv = 单位矩阵
- 行列式 det(A)
det = torch.det(A)
- 迹(对角线和 tr(A))
tr = torch.trace(A)
- 对角线提取/构造对角矩阵
torch.diag(A) # 提取对角线
torch.diag(x) # 向量生成对角阵
5. 分解运算(特征、SVD、LU)
- 特征值、特征向量 Ax=\lambda x
eigvals, eigvecs = torch.linalg.eig(A)
- SVD奇异值分解 A=U\Sigma V^T
U, S, Vt = torch.linalg.svd(A)
- LU分解、QR分解
Q, R = torch.linalg.qr(A)
L, U = torch.linalg.lu(A)
6. 范数、距离
- L2范数(向量模长)
torch.norm(x)
torch.linalg.norm(x)
- L1范数、无穷范数
torch.norm(x, p=1)
torch.norm(x, p=float('inf'))
7. 线性方程组求解 Ax=b
# 求解 x = A^{-1}b
x = torch.linalg.solve(A, b)
8. 维度拼接、变形(矩阵维度操作)
- 重塑维度:
A.reshape(m,n)/A.view(m,n) - 拼接矩阵:
torch.cat([A,B], dim=0) # 纵向拼接(行增加)
torch.cat([A,B], dim=1) # 横向拼接(列增加)
- 增加/删除维度:
unsqueeze()/squeeze()
9. 广播机制(同numpy)
不同维度张量自动扩展匹配形状,无需手动复制矩阵,大幅简化向量矩阵混合运算。
10. GPU加速
所有运算无缝迁移显卡,只需转cuda:
A = torch.tensor([[1,2],[3,4]]).cuda()
# 或
A = torch.tensor([[1,2],[3,4]], device="cuda")
11. 关键区分避坑(高频易错)
A * B:逐元素相乘 ≠ 矩阵乘法A @ B / matmul:标准线性代数矩阵乘法torch.mm仅二维;bmm仅三维批量;matmul通用兼容所有维度torch.inverse仅可逆方阵;奇异矩阵用SVD伪逆torch.linalg.pinv(A)
12. 适用场景(结合你之前线性回归)
线性回归求解 X^TXw=X^Ty、最小二乘、梯度下降矩阵推导、数据集特征向量运算全部依靠以上API实现。
关联文档