torch.linalg.cond#
- torch.linalg.cond(A, p=None, *, out=None) Tensor#
計算矩陣相對於矩陣範數的條件數。
令 為 或 ,則**條件數** 定義為矩陣
A的條件數衡量了線性系統 AX = B 相對於矩陣範數的數值穩定性。支援浮點 (float)、雙精度浮點 (double)、複數浮點 (cfloat) 和複數雙精度浮點 (cdouble) 資料型別。還支援矩陣批處理,如果 `A` 是一個矩陣批處理,則輸出具有相同的批處理維度。
p定義了計算的矩陣範數。支援以下範數:p矩陣範數
無
2-範數(最大奇異值)
‘fro’
Frobenius 範數
‘nuc’
核範數
inf
max(sum(abs(x), dim=1))
-inf
min(sum(abs(x), dim=1))
1
max(sum(abs(x), dim=0))
-1
min(sum(abs(x), dim=0))
2
最大奇異值
-2
最小奇異值
其中 inf 指 float(‘inf’)、NumPy 的 inf 物件或任何等效物件。
對於
p為 (‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一個時,此函式使用torch.linalg.norm()和torch.linalg.inv()。因此,在這種情況下,矩陣(或批處理中的每個矩陣)A必須是方陣且可逆。對於
p在 (2, -2) 中時,此函式可以根據奇異值 來計算。在這些情況下,它使用
torch.linalg.svdvals()計算。對於這些範數,矩陣(或批處理中的每個矩陣)A可以是任何形狀。注意
當輸入在 CUDA 裝置上時,如果
p是 (‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一個,此函式將該裝置與 CPU 同步。- 引數
- 關鍵字引數
out (Tensor, optional) – 輸出張量。如果為 None 則忽略。預設為 None。
- 返回
一個實值張量,即使
A是複數。- 引發
RuntimeError – 如果
p是 (‘fro’, ‘nuc’, inf, -inf, 1, -1) 中的一個,並且A矩陣或A批處理中的任何矩陣不是方陣或不可逆。
示例
>>> A = torch.randn(3, 4, 4, dtype=torch.complex64) >>> torch.linalg.cond(A) >>> A = torch.tensor([[1., 0, -1], [0, 1, 0], [1, 0, 1]]) >>> torch.linalg.cond(A) tensor([1.4142]) >>> torch.linalg.cond(A, 'fro') tensor(3.1623) >>> torch.linalg.cond(A, 'nuc') tensor(9.2426) >>> torch.linalg.cond(A, float('inf')) tensor(2.) >>> torch.linalg.cond(A, float('-inf')) tensor(1.) >>> torch.linalg.cond(A, 1) tensor(2.) >>> torch.linalg.cond(A, -1) tensor(1.) >>> torch.linalg.cond(A, 2) tensor([1.4142]) >>> torch.linalg.cond(A, -2) tensor([0.7071]) >>> A = torch.randn(2, 3, 3) >>> torch.linalg.cond(A) tensor([[9.5917], [3.2538]]) >>> A = torch.randn(2, 3, 3, dtype=torch.complex64) >>> torch.linalg.cond(A) tensor([[4.6245], [4.5671]])