torch.linalg.norm
- torch.linalg.norm(A, ord=None, dim=None, keepdim=False, *, out=None, dtype=None) → Tensor
-
计算向量或矩阵的 norms(规范/范数)。
如果有更符合中文习惯的说法,可以进一步优化为:计算向量或矩阵的 norm(范数)。
但根据要求只做自然通顺处理,则原句已经很合适,直接返回:计算向量或矩阵的范数。
支持浮点型、双精度型、复数浮点型和复数双精度型数据类型的输入。
该函数是计算向量范数还是矩阵范数,取决于以下条件:
-
如果
dim
是一个 int,则会计算向量的范数。 -
如果
dim
是一个 2-元组,则会计算矩阵的范数。 -
如果
dim
和ord
均为 None,A
将被展平为一维,并计算结果向量的 2-范数。 -
如果
dim = None
且ord != None
,则A
必须是1D或2D数组。
ord
定义了要计算的范数。支持的范数包括:ord
矩阵范数
向量范数
无 (默认)
Frobenius 范数
2-范数(参见下文)
“fro”
Frobenius 范数
– 不支持 –
“nuc”
核范数
– 不支持 –
inf 由于这里的修改目标是为了使句子更自然、更符合中文习惯,但给定的内容仅为一个标签“inf”,在不改变其意义和结构的前提下,保持原样最为合适。因此直接返回原文: infmax(sum(abs(x), dim=1))
max(|x|)
-∞
min(sum(abs(x), dim=1))
min(|x|)
0
– 不支持 –
sum(x ≠ 0)
1
max(sum(abs(x), dim=0))
如下方所示
-1
min(sum(abs(x), dim=0)) (表示先对x取绝对值,然后沿维度0求和,最后取最小值)
如下方所示
2
最大的奇异值
如下方所示
-2
最小奇异值
如下方所示
其他 int 或 float 类型
– 不支持 –
(∑(abs(x)ord)(1 / ord)
其中inf指的是float('inf')、NumPy的inf对象,或者任何等效的对象。
参见
torch.linalg.vector_norm()
用于计算向量的范数。torch.linalg.matrix_norm()
用于计算矩阵的范数。上述函数通常比使用
torch.linalg.norm()
更清晰和灵活。例如,torch.linalg.norm(A, ord=1, dim=(0, 1))总是计算矩阵范数,而torch.linalg.vector_norm(A, ord=1, dim=(0, 1))可以用来计算两个维度上的向量范数。- 参数
- 关键字参数
-
-
out (Tensor, optional) – 输出张量。默认为None,若未指定则忽略。
-
dtype (
torch.dtype
, 可选) – 如果指定了,输入张量在执行操作前会被转换为dtype
类型,并且返回的张量类型也将是dtype
。默认值: None
-
- 返回值
-
这是一个实值张量,即便在
A
为复数的情况下也成立。
示例:
>>> from torch import linalg as LA >>> a = torch.arange(9, dtype=torch.float) - 4 >>> a tensor([-4., -3., -2., -1., 0., 1., 2., 3., 4.]) >>> B = a.reshape((3, 3)) >>> B tensor([[-4., -3., -2.], [-1., 0., 1.], [ 2., 3., 4.]]) >>> LA.norm(a) tensor(7.7460) >>> LA.norm(B) tensor(7.7460) >>> LA.norm(B, 'fro') tensor(7.7460) >>> LA.norm(a, float('inf')) tensor(4.) >>> LA.norm(B, float('inf')) tensor(9.) >>> LA.norm(a, -float('inf')) tensor(0.) >>> LA.norm(B, -float('inf')) tensor(2.) >>> LA.norm(a, 1) tensor(20.) >>> LA.norm(B, 1) tensor(7.) >>> LA.norm(a, -1) tensor(0.) >>> LA.norm(B, -1) tensor(6.) >>> LA.norm(a, 2) tensor(7.7460) >>> LA.norm(B, 2) tensor(7.3485) >>> LA.norm(a, -2) tensor(0.) >>> LA.norm(B.double(), -2) tensor(1.8570e-16, dtype=torch.float64) >>> LA.norm(a, 3) tensor(5.8480) >>> LA.norm(a, -3) tensor(0.)
使用
dim
参数计算向量范数:>>> c = torch.tensor([[1., 2., 3.], ... [-1, 1, 4]]) >>> LA.norm(c, dim=0) tensor([1.4142, 2.2361, 5.0000]) >>> LA.norm(c, dim=1) tensor([3.7417, 4.2426]) >>> LA.norm(c, ord=1, dim=1) tensor([6., 6.])
使用
dim
参数计算矩阵范数:>>> A = torch.arange(8, dtype=torch.float).reshape(2, 2, 2) >>> LA.norm(A, dim=(1,2)) tensor([ 3.7417, 11.2250]) >>> LA.norm(A[0, :, :]), LA.norm(A[1, :, :]) (tensor(3.7417), tensor(11.2250))
-