torch.linalg.norm¶
- torch.linalg.norm(A, ord=None, dim=None, keepdim=False, *, out=None, dtype=None) Tensor ¶
計算向量或矩陣的範數。
支援 float、double、cfloat 和 cdouble 數據類型作為輸入。
這個函數計算的是向量範數還是矩陣範數,取決於以下方式:
如果
dim
是一個 int,則計算向量範數。如果
dim
是一個 2-tuple,則計算矩陣範數。如果
dim
= None 且ord
= None,則A
將會被展平成 1 維,並計算結果向量的 2-範數。如果
dim
= None 且ord
!= None,則A
必須是 1 維或 2 維。
ord
定義了要計算的範數。支援以下範數:ord
矩陣的範數
向量的範數
None (預設)
Frobenius 範數
2-範數(見下文)
‘fro’
Frobenius 範數
– 不支援 –
‘nuc’
核範數 (nuclear norm)
– 不支援 –
inf
max(sum(abs(x), dim=1))
max(abs(x))
-inf
min(sum(abs(x), dim=1))
min(abs(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)) 可以計算跨兩個維度的向量範數。- 參數
- 關鍵字參數
out (Tensor, optional) – 輸出張量。 如果 None 則忽略。 預設值:None。
dtype (
torch.dtype
, optional) – 如果指定,輸入張量將在執行運算之前轉換為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))