【PyTorch根本】PyTorch还支持线性代数运算?PyTorch的内置线性代数运算示例

[复制链接]
发表于 2025-3-21 11:27:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目次
引言
1. trace - 对角线元素之和(矩阵的迹)
2. diag - 提取对角线元素 
3. triu / tril - 上三角/下三角矩阵
4. mm / bmm - 矩阵乘法 / 批量矩阵乘法
5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算
6. t - 转置矩阵
7. dot / cross - 内积 / 外积
8. inverse - 求逆矩阵
9. svd - 奇异值分解
结语

引言

PyTorch 作为一个强大的深度学习框架,提供了丰富的线性代数功能,使得开发者能够高效地举行各种矩阵运算。通过利用 PyTorch 中的相关库,我们可以避免重复“造轮子”,从而专注于实现更高层次的算法和模子。本文将先容几个常用的 PyTorch 中的线性代数功能,资助您更轻松地举行矩阵利用,从而提拔您的开发效率。
   
​
  另外,若有进一步研究需求,可以参考官方文档。

1. trace - 对角线元素之和(矩阵的迹)

  
  1. # 1. trace - 对角线元素之和(矩阵的迹)
  2. import torch
  3. # 创建一个 3x3 矩阵
  4. tensor = torch.tensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
  5. # 计算矩阵的迹
  6. trace_value = torch.trace(tensor)
  7. print(f"矩阵的迹: {trace_value}")
复制代码
​ 
2. diag - 提取对角线元素 

  
  1. # 2. diag - 提取对角线元素
  2. # 提取对角线元素
  3. diagonal_elements = torch.diag(tensor)
  4. print(f"对角线元素: {diagonal_elements}")
复制代码
​ 
3. triu / tril - 上三角/下三角矩阵

  
  1. # 3. triu / tril - 上三角/下三角矩阵
  2. # 创建一个 3x3 矩阵
  3. tensor = torch.tensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
  4. # 获取上三角矩阵
  5. upper_triangle = torch.triu(tensor)
  6. print(f"上三角矩阵:\n{upper_triangle}")
  7. # 获取下三角矩阵
  8. lower_triangle = torch.tril(tensor)
  9. print(f"下三角矩阵:\n{lower_triangle}")
复制代码
 
​
4. mm / bmm - 矩阵乘法 / 批量矩阵乘法

  
  1. # 4. mm / bmm - 矩阵乘法 / 批量矩阵乘法
  2. # 创建两个 3x3 矩阵
  3. A = torch.tensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
  4. B = torch.tensor([[9., 8., 7.], [6., 5., 4.], [3., 2., 1.]])
  5. # 矩阵乘法
  6. result_mm = torch.mm(A, B)
  7. print(f"矩阵乘法结果:\n{result_mm}")
  8. # 批量矩阵乘法 (batch matrix multiplication)
  9. batch_A = torch.rand(10, 3, 3)  # 10 个 3x3 矩阵
  10. batch_B = torch.rand(10, 3, 3)
  11. result_bmm = torch.bmm(batch_A, batch_B)
  12. print(f"批量矩阵乘法结果:\n{result_bmm[0]}")  # 显示第一个批次的结果
复制代码
​ 
5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算

  
  1. # 5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算
  2. # 使用 addmm 函数,矩阵加法加乘法
  3. C = torch.tensor([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])
  4. result_addmm = torch.addmm(C, A, B)
  5. print(f"addmm 矩阵加法加乘法结果:\n{result_addmm}")
  6. # 使用 addbmm 批量矩阵运算
  7. # 创建批量矩阵
  8. batch_A = torch.rand(10, 3, 4)  # 10 个 3x4 矩阵
  9. batch_B = torch.rand(10, 4, 3)  # 10 个 4x3 矩阵
  10. batch_C = torch.rand(3, 3)
  11. # 使用 addbmm 进行批量矩阵运算 C = A @ B + C
  12. result_addbmm = torch.addbmm(batch_C, batch_A, batch_B)
  13. print(f"addbmm 批量矩阵运算结果:\n{result_addbmm[0]}")  # 显示第一个批次的结果
复制代码
​ 
6. t - 转置矩阵

  
  1. # 6. t - 转置矩阵
  2. # 创建一个 2x3 矩阵
  3. tensor = torch.tensor([[1., 2., 3.], [4., 5., 6.]])
  4. # 转置矩阵
  5. transposed_tensor = tensor.t()
  6. print(f"转置后的矩阵:\n{transposed_tensor}")
复制代码
​ 
7. dot / cross - 内积 / 外积

  
  1. # 7. dot / cross - 内积 / 外积
  2. # 创建两个向量
  3. vector1 = torch.tensor([1., 2., 3.])
  4. vector2 = torch.tensor([4., 5., 6.])
  5. # 计算内积
  6. dot_product = torch.dot(vector1, vector2)
  7. print(f"内积: {dot_product}")
  8. # 计算外积
  9. cross_product = torch.cross(vector1, vector2)
  10. print(f"外积: {cross_product}")
复制代码
​ 
8. inverse - 求逆矩阵

  
  1. # 8. inverse - 求逆矩阵
  2. # 创建一个 2x2 矩阵
  3. matrix = torch.tensor([[4., 7.], [2., 6.]])
  4. # 求矩阵的逆
  5. inverse_matrix = torch.inverse(matrix)
  6. print(f"矩阵的逆:\n{inverse_matrix}")
复制代码
 
​
9. svd - 奇异值分解

  
  1. # 9. svd - 奇异值分解
  2. # 创建一个 3x3 矩阵
  3. matrix = torch.tensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
  4. # 进行奇异值分解
  5. U, S, V = torch.svd(matrix)
  6. print(f"U 矩阵:\n{U}")
  7. print(f"S 奇异值:\n{S}")
  8. print(f"V 矩阵:\n{V}")
复制代码
 
​

结语

在这篇博客中,我们探究了如何利用 PyTorch 中的线性代数功能来简化矩阵利用。通过利用这些内置的高效函数,不仅可以节流时间和精力,还能减少埋伏的错误,提拔代码的可读性和可维护性。盼望大家在利用 PyTorch 举行矩阵运算时,能够充分利用这些强大的工具,而不再须要自己重复实现根本功能。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表