近日在看沐神的《动手学深度学习》,其中提到了范数这一数学概念,感觉很陌生,参考ChatGPT补一下知识。
目录
- 范数
-
-
- 示例 1: 计算向量的 L2 范数(欧几里得范数)
- 示例 2: 计算矩阵的 Frobenius 范数
- 示例 3: 计算向量的 L1 范数(曼哈顿距离)
- 曼哈顿范数的定义
-
- 曼哈顿范数的计算示例
-
-
- 在Python中计算曼哈顿范数
-
- 使用NumPy
- 使用PyTorch
- 示例 4: 计算向量的无穷范数(最大值范数)
- 示例 5: 计算矩阵的列范数
- 示例 6: 计算矩阵的行范数
- 示例 7: 计算高维张量的整体范数
- 示例 8: 沿特定维度计算高维张量的范数
- 示例 9: 沿多个维度计算高维张量的范数
-
范数
让我们通过具体的示例来详细说明如何使用 torch.linalg.norm
计算不同类型的范数,以及如何处理高维张量。
示例 1: 计算向量的 L2 范数(欧几里得范数)
import torch
# 创建一个向量
vector = torch.tensor([3.0, 4.0])
# 计算 L2 范数
l2_norm = torch.linalg.norm(vector, ord=2)
print(f"L2 范数: {
l2_norm}") # 输出: 5.0
在这个例子中,计算的是向量 [3.0, 4.0]
的 L2 范数,其结果是 5.0。
此处使用的是L2范数,也是norm的默认设置,其实就是平方根,类似于勾股定理的结果。
示例 2: 计算矩阵的 Frobenius 范数
# 创建一个矩阵
matrix = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
# 计算 Frobenius 范数
frobenius_norm = torch.linalg.norm(matrix, ord='fro')
print(f"Frobenius 范数: {
frobenius_norm}") # 输出: 5.4772
在这个例子中,计算的是矩阵的 Frobenius 范数,即矩阵中所有元素的平方和的平方根。上面的结果也就是30的开方。
示例 3: 计算向量的 L1 范数(曼哈顿距离)
# 创建一个向量
vector = torch.tensor([3.0, 4.0]