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 的最大值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值