捷徑

torch.linalg.cond

torch.linalg.cond(A, p=None, *, out=None) Tensor

計算矩陣相對於矩陣範數的條件數。

K\mathbb{K}R\mathbb{R}C\mathbb{C},矩陣 AKn×nA \in \mathbb{K}^{n \times n}條件數 κ\kappa 定義為

κ(A)=ApA1p\kappa(A) = \|A\|_p\|A^{-1}\|_p

A 的條件數衡量線性系統 AX = B 相對於矩陣範數的數值穩定性。

支援 float、double、cfloat 和 cdouble 資料類型作為輸入。 也支援矩陣批次,如果 A 是一批矩陣,則輸出具有相同的批次維度。

p 定義計算的矩陣範數。 支援以下範數

p

矩陣範數

None

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) 中,此函數可以用奇異值 σ1σn\sigma_1 \geq \ldots \geq \sigma_n 來計算

κ2(A)=σ1σnκ2(A)=σnσ1\kappa_2(A) = \frac{\sigma_1}{\sigma_n}\qquad \kappa_{-2}(A) = \frac{\sigma_n}{\sigma_1}

在這些情況下,會使用 torch.linalg.svdvals() 來計算。對於這些範數,矩陣(或批次中的每個矩陣)A 可以有任何形狀。

注意

當輸入位於 CUDA 裝置上時,如果 p(‘fro’, ‘nuc’, inf, -inf, 1, -1) 其中之一,此函式會將該裝置與 CPU 同步。

參見

torch.linalg.solve() 函式用於求解方陣的線性系統。

torch.linalg.lstsq() 函式用於求解一般矩陣的線性系統。

參數
  • A (Tensor) – 形狀為 (*, m, n) 的張量,其中 * 是零或多個批次維度,用於 p(2, -2) 中,形狀為 (*, n, n),其中每個矩陣對於 p(‘fro’, ‘nuc’, inf, -inf, 1, -1) 中是可逆的。

  • p (int, inf, -inf, 'fro', 'nuc', optional) – 用於計算的矩陣範數類型(請參閱上文)。預設值:None

關鍵字參數

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]])

文件

存取 PyTorch 的完整開發者文件

檢視文件

教學

取得初學者和進階開發者的深入教學

檢視教學

資源

尋找開發資源並獲得問題解答

檢視資源