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

目录

引言

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

[2. diag - 提取对角线元素](#2. diag - 提取对角线元素)

[3. triu / tril - 上三角/下三角矩阵](#3. triu / tril - 上三角/下三角矩阵)

[4. mm / bmm - 矩阵乘法 / 批量矩阵乘法](#4. mm / bmm - 矩阵乘法 / 批量矩阵乘法)

[5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算](#5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算)

[6. t - 转置矩阵](#6. t - 转置矩阵)

[7. dot / cross - 内积 / 外积](#7. dot / cross - 内积 / 外积)

[8. inverse - 求逆矩阵](#8. inverse - 求逆矩阵)

[9. svd - 奇异值分解](#9. svd - 奇异值分解)

结语


引言

PyTorch 作为一个强大的深度学习框架,提供了丰富的线性代数功能,使得开发者能够高效地进行各种矩阵运算。通过使用 PyTorch 中的相关库,我们可以避免重复"造轮子",从而专注于实现更高层次的算法和模型。本文将介绍几个常用的 PyTorch 中的线性代数功能,帮助您更轻松地进行矩阵操作,从而提升您的开发效率。

另外,若有进一步研究需求,可以参考官方文档

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

python 复制代码
# 1. trace - 对角线元素之和(矩阵的迹)
import torch

# 创建一个 3x3 矩阵
tensor = torch.tensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
# 计算矩阵的迹
trace_value = torch.trace(tensor)
print(f"矩阵的迹: {trace_value}")

2. diag - 提取对角线元素

python 复制代码
# 2. diag - 提取对角线元素
# 提取对角线元素
diagonal_elements = torch.diag(tensor)
print(f"对角线元素: {diagonal_elements}")

3. triu / tril - 上三角/下三角矩阵

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

# 获取下三角矩阵
lower_triangle = torch.tril(tensor)
print(f"下三角矩阵:\n{lower_triangle}")

4. mm / bmm - 矩阵乘法 / 批量矩阵乘法

python 复制代码
# 4. mm / bmm - 矩阵乘法 / 批量矩阵乘法
# 创建两个 3x3 矩阵
A = torch.tensor([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
B = torch.tensor([[9., 8., 7.], [6., 5., 4.], [3., 2., 1.]])
# 矩阵乘法
result_mm = torch.mm(A, B)
print(f"矩阵乘法结果:\n{result_mm}")

# 批量矩阵乘法 (batch matrix multiplication)
batch_A = torch.rand(10, 3, 3)  # 10 个 3x3 矩阵
batch_B = torch.rand(10, 3, 3)
result_bmm = torch.bmm(batch_A, batch_B)
print(f"批量矩阵乘法结果:\n{result_bmm[0]}")  # 显示第一个批次的结果

5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算

python 复制代码
# 5. addmm / addbmm / addmv / addr / baddbmm - 矩阵运算
# 使用 addmm 函数,矩阵加法加乘法
C = torch.tensor([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])
result_addmm = torch.addmm(C, A, B)
print(f"addmm 矩阵加法加乘法结果:\n{result_addmm}")

# 使用 addbmm 批量矩阵运算
# 创建批量矩阵
batch_A = torch.rand(10, 3, 4)  # 10 个 3x4 矩阵
batch_B = torch.rand(10, 4, 3)  # 10 个 4x3 矩阵
batch_C = torch.rand(3, 3)

# 使用 addbmm 进行批量矩阵运算 C = A @ B + C
result_addbmm = torch.addbmm(batch_C, batch_A, batch_B)
print(f"addbmm 批量矩阵运算结果:\n{result_addbmm[0]}")  # 显示第一个批次的结果

6. t - 转置矩阵

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

7. dot / cross - 内积 / 外积

python 复制代码
# 7. dot / cross - 内积 / 外积
# 创建两个向量
vector1 = torch.tensor([1., 2., 3.])
vector2 = torch.tensor([4., 5., 6.])

# 计算内积
dot_product = torch.dot(vector1, vector2)
print(f"内积: {dot_product}")

# 计算外积
cross_product = torch.cross(vector1, vector2)
print(f"外积: {cross_product}")

8. inverse - 求逆矩阵

python 复制代码
# 8. inverse - 求逆矩阵
# 创建一个 2x2 矩阵
matrix = torch.tensor([[4., 7.], [2., 6.]])
# 求矩阵的逆
inverse_matrix = torch.inverse(matrix)
print(f"矩阵的逆:\n{inverse_matrix}")

9. svd - 奇异值分解

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

结语

在这篇博客中,我们探讨了如何使用 PyTorch 中的线性代数功能来简化矩阵操作。通过利用这些内置的高效函数,不仅可以节省时间和精力,还能减少潜在的错误,提升代码的可读性和可维护性。希望大家在使用 PyTorch 进行矩阵运算时,能够充分利用这些强大的工具,而不再需要自己重复实现基础功能。

相关推荐
A__tao3 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
墨染天姬3 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
研究点啥好呢3 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
AI成长日志3 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
2501_948114243 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠3 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
迷藏4943 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
黎阳之光3 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
小超同学你好4 小时前
面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注
人工智能·语言模型
明日清晨4 小时前
python扫码登录dy
开发语言·python