torch.linalg.norm¶
- torch.linalg.norm(A, ord=None, dim=None, keepdim=False, *, out=None, dtype=None) 张量¶
计算向量或矩阵的范数。
支持float、double、cfloat和cdouble数据类型的输入。
此函数计算的是向量范数还是矩阵范数,取决于以下情况:
如果
dim是一个 int,将计算向量范数。如果
dim是一个 2-元组,将计算矩阵范数。如果
dim= None 且ord= None,A将被展平为1D,并且将计算结果向量的2-范数。如果
dim= None 且ord!= None,A必须是 1D 或 2D。
ord定义了计算的范数。支持以下范数:ord矩阵的范数
向量的范数
无(默认)
Frobenius 范数
2-范数(见下文)
‘fro’
Frobenius 范数
– 不支持 –
‘nuc’
核范数
– 不支持 –
无穷大
max(sum(abs(x), dim=1))
最大值(绝对值(x))
-无穷大
min(sum(abs(x), dim=1))
最小值(绝对值(x))
0
– 不支持 –
sum(x != 0)
1
max(sum(abs(x), dim=0))
如下
-1
min(sum(abs(x), dim=0))
如下
2
最大奇异值
如下
-2
最小奇异值
如下
其他 int 或 float
– 不支持 –
sum(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))可以计算两个维度上的向量范数。- Parameters
- Keyword Arguments
输出 (张量, 可选) – 输出张量。如果为无,则忽略。默认值:无。
dtype (
torch.dtype, 可选) – 如果指定,输入张量在执行操作前会被转换为dtype,并且返回的张量的类型将是dtype。默认值:None
- Returns
一个实值张量,即使
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))