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]
总结
输入形状 | 输出形状 | ||
---|---|---|---|
|
|
| 每个批次独立进行矩阵乘法 |
|
|
| 广播批次维度后进行矩阵乘法 |
|
|
| 标准矩阵乘法 |
|
|
| 广播后进行矩阵乘法 |
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 个基本性质:
非负性:对于任意向量 x,范数 ∥x∥≥0,且仅当 x 是零向量时,范数为 0。
齐次性:对于任意标量 α 和向量 x,有 ∥αx∥=∣α∣⋅∥x∥。
三角不等式:对于任意两个向量 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 的最大值。