当前位置: 首页 > news >正文

PyTorch常用的简单数学运算

一、基础算术运算

1. 逐元素运算

a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])# 加减乘除
a + b  # [5, 7, 9]
a - b  # [-3, -3, -3]
a * b  # [4, 10, 18]
a / b  # [0.25, 0.4, 0.5]# 幂运算、平方根
a ** 2  # [1, 4, 9]
torch.sqrt(a)  # [1.0, 1.414, 1.732]

2. 标量运算

a = torch.tensor([1, 2, 3])a + 2  # [3, 4, 5]
a * 3  # [3, 6, 9]

二、矩阵运算

 1. 矩阵乘法

a = torch.rand(2, 3)  # [2, 3]
b = torch.rand(3, 4)  # [3, 4]# 矩阵乘法
a @ b  # [2, 4],等价于 torch.matmul(a, b)

 2. 批量矩阵乘法

a = torch.rand(10, 2, 3)  # [10, 2, 3]
b = torch.rand(10, 3, 4)  # [10, 3, 4]# 批量矩阵乘法(每个批次独立计算)
torch.bmm(a,b) # [10, 2, 4]

 总结

输入形状

输出形状

torch.bmm(A, B)

[b, m, k][b, k, n]

[b, m, n]

每个批次独立进行矩阵乘法

torch.bmm(A, B)

[b, m, k][1, k, n]

[b, m, n]

广播批次维度后进行矩阵乘法

torch.matmul(A, B)

[m, k][k, n]

[m, n]

标准矩阵乘法

torch.matmul(A, B)

[b, m, k][k, n]

[b, m, n]

广播后进行矩阵乘法

 3. 点积(内积)

a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])torch.dot(a, b)  # 32(1*4 + 2*5 + 3*6)

 三、降维运算

1. 求和、均值、最大值、最小值

a = torch.rand(3, 4)torch.sum(a)          # 标量,所有元素和
torch.sum(a, dim=0)   # [4],按行求和
torch.mean(a, dim=1)  # [3],按列求均值
torch.max(a, dim=0)   # 返回 (values, indices) 元组
torch.min(a, dim=1)   # 返回 (values, indices) 元组

 2. 范数计算

a = torch.tensor([3.0, 4.0])torch.norm(a, p=2)  # 5.0(L2范数)
torch.norm(a, p=1)  # 7.0(L1范数)

    在数学和机器学习中,范数(Norm) 是衡量向量 “大小” 或 “长度” 的一种函数,它为向量空间中的每个向量赋予一个非负实数,表示其 “规模”。范数是欧几里得距离的推广,在深度学习中常用于损失函数设计、正则化、优化算法等场景。

(1)、所有范数都满足以下 3 个基本性质:

  1. 非负性:对于任意向量 x,范数 ∥x∥≥0,且仅当 x 是零向量时,范数为 0。

  2. 齐次性:对于任意标量 α 和向量 x,有 ∥αx∥=∣α∣⋅∥x∥。

  3. 三角不等式:对于任意两个向量 x 和 y,有 ∥x+y∥≤∥x∥+∥y∥。

(2)、常见的向量范数(对应 torch.norm 中的 p 参数) 

在 PyTorch 中,torch.norm(a, p) 计算向量 a 的 p - 范数,其中 p 是范数的阶数。最常用的有以下几种:

① L1 范数(p=1)

  • 定义:向量所有元素的绝对值之和。
    公式:

  • 例子
    对于向量 a=[3.0,4.0],∥a∥1​=∣3.0∣+∣4.0∣=3+4=7.0。

  • 特点:对异常值(离群点)更敏感,会将大的误差放大,但计算简单。

L2 范数(p=2)

  • 定义:向量所有元素的平方和的平方根(即欧几里得距离)。
    公式:

  • 例子
    对于向量 a=[3.0,4.0],

  • 特点:是最常用的范数,对误差的惩罚更平滑,在机器学习中常用于正则化(防止过拟合)。

 四、三角函数与指数对数

x = torch.tensor([0.0, torch.pi/2, torch.pi])torch.sin(x)  # [0.0, 1.0, 0.0]
torch.cos(x)  # [1.0, 0.0, -1.0]
torch.tan(x)  # [0.0, inf, 0.0]y = torch.tensor([1.0, 2.0, 3.0])torch.exp(y)  # [e^1, e^2, e^3]
torch.log(y)  # [ln(1), ln(2), ln(3)]

五、高级运算

 1. 矩阵分解

a = torch.rand(3, 3)# LU分解
P, L, U = torch.lu(a)# SVD分解
U, S, V = torch.svd(a)

 2. 特征值与特征向量

a = torch.rand(3, 3)eigenvalues, eigenvectors = torch.eig(a, eigenvectors=True)

 六、统计运算

1. 协方差矩阵

x = torch.rand(10, 3)  # 10个样本,3个特征# 计算协方差矩阵
cov_matrix = torch.cov(x.t())  # [3, 3]

 2. 直方图

x = torch.rand(100)# 计算直方图
hist = torch.histc(x, bins=10, min=0, max=1)
# input:输入张量(必须是一维张量)。
# bins:直方图的分箱数(即柱子数量),默认为 10。
# min:直方图的最小值范围,小于此值的元素会被忽略。
# max:直方图的最大值范围,大于此值的元素会被忽略。若 max=0,则使用 input 的最大值。
http://www.dtcms.com/a/289314.html

相关文章:

  • Paimon INSERT OVERWRITE
  • 一维数组练题习~
  • PyTorch的基础概念和复杂模型的基本使用
  • 【软件测试】从软件测试到Bug评审:生命周期与管理技巧
  • ESXi6.7硬件传感器红色警示信息
  • ICT模拟零件测试方法--测量参数详解
  • ThinkPHP8极简上手指南:开启高效开发之旅
  • 基于机器视觉的迈克耳孙干涉环自动计数系统设计与实现
  • STM32CubeMX的一些操作步骤的作用
  • 拼写纠错模型Noisy Channel(下)
  • 机器学习理论基础 - 核心概念篇
  • 复杂度优先:基于推理链复杂性的提示工程新范式
  • Linux操作系统之线程(四):线程控制
  • 20250720-1-Kubernetes 调度-白话理解创建一个Pod的内部工作流_笔记
  • Qt的安装和环境配置
  • Ubuntu挂载和取消挂载
  • 【vue-7】Vue3 响应式数据声明:深入理解 reactive()
  • Matlab自学笔记六十四:求解自变量带有约束条件的方程
  • 相同问题的有奇点模型和无奇点模型有什么区别
  • 服务器上的文件复制到本地 Windows 系统
  • [学习] 深入理解傅里叶变换:从时域到频域的桥梁
  • 04训练windows电脑低算力显卡如何部署pytorch实现GPU加速
  • LINUX720 SWAP扩容;新增逻辑卷;逻辑卷扩容;数据库迁移;gdisk
  • 【超越VGGT】π3-利用置换等变方法去除3r系列的归纳偏置
  • 机器视觉---深度图像存储格式
  • 监督学习应用
  • 零基础学习性能测试第三章:执行性能测试
  • Spring Boot 订单超时自动取消的 3 种主流实现方案
  • 将SAC强化学习算法部署到ROS2的完整指南
  • 基于卷积傅里叶分析网络 (CFAN)的心电图分类的统一时频方法