PyTorch线性代数操作详解:点积、矩阵乘法、范数与轴求和
本文通过代码示例详细讲解PyTorch中常用的线性代数操作,包括点积、矩阵乘法、范数计算以及按轴求和等操作,帮助读者掌握张量运算的核心方法。
1. 点积运算
点积(Dot Product)是两个向量对应元素相乘后求和的结果。
 实现代码:
import torchx = torch.tensor([0, 1, 2, 3], dtype=torch.float32)
y = torch.ones(4, dtype=torch.float32)
x, y, torch.dot(x, y)  # 计算点积 
输出结果:
(tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.)) 
等价实现方式:
torch.sum(x * y)  # 通过逐元素乘法和求和实现点积 
输出:
tensor(6.) 
2. 矩阵与向量乘法
使用 torch.mv 实现矩阵与向量的乘法。
 代码示例:
x = torch.arange(12).reshape((3, 4)).float()
y = torch.ones(4, dtype=torch.float32)
x.shape, y.shape, torch.mv(x, y)  # 矩阵形状、向量形状及乘法结果 
输出:
(torch.Size([3, 4]), torch.Size([4]), tensor([ 6., 22., 38.])) 
3. 矩阵与矩阵乘法
使用 torch.mm 实现矩阵与矩阵的乘法。
 代码示例:
b = torch.ones(4, 3).float()
torch.mm(x, b)  # 3x4矩阵与4x3矩阵相乘 
输出:
tensor([[ 6.,  6.,  6.],[22., 22., 22.],[38., 38., 38.]]) 
4. 范数计算
L2范数(欧几里得范数)
torch.norm(y)  # 计算向量y的L2范数 
输出:
tensor(2.) 
L1范数(绝对值之和)
torch.abs(y).sum()  # 计算向量y的L1范数 
输出:
tensor(4.) 
Frobenius范数(矩阵范数)
torch.norm(x)  # 计算矩阵x的F范数 
输出:
tensor(22.4944) 
5. 按轴求和
沿指定轴求和并保留维度
sum_x = x.sum(axis=0, keepdim=True)  # 沿水平方向求和,保留维度
sum_x 
输出:
tensor([[12., 15., 18., 21.]]) 
三维张量的轴求和
a = torch.ones((2, 5, 4))
a.shape  # 初始形状 
输出:
torch.Size([2, 5, 4]) 
对多个轴求和
a.sum(axis=[0, 2], keepdim=True).shape  # 沿第0和第2轴求和 
输出:
torch.Size([1, 5, 1]) 
单轴求和保留维度
a.sum(axis=1, keepdim=True).shape  # 沿第1轴求和并保留维度 
输出:
torch.Size([2, 1, 4]) 
总结
本文演示了PyTorch中常用的线性代数操作,包括:
-  
点积:
torch.dot或逐元素乘法后求和; -  
矩阵乘法:
torch.mv(矩阵与向量)、torch.mm(矩阵与矩阵); -  
范数计算:L1、L2和Frobenius范数;
 -  
轴求和:通过
sum(axis)控制求和方向,keepdim保留维度。 
这些操作是深度学习模型实现的基础,熟练掌握可提升张量运算的效率和代码可读性。
