torch.linalg.matrix_rank¶
- torch.linalg.matrix_rank(A, *, atol=None, rtol=None, hermitian=False, out=None) Tensor¶
計算矩陣的數值秩。
矩陣的秩計算為大於閾值 的奇異值數量(或當
hermitian= True 時,為絕對值大於該閾值的特徵值數量),其中 是最大奇異值(或特徵值)。支援 float, double, cfloat 和 cdouble 資料型別的輸入。也支援矩陣的批處理,如果
A是一批矩陣,則輸出具有相同的批處理維度。如果
hermitian= True,則假定A在複數情況下是厄米矩陣,在實數情況下是對稱矩陣,但這在內部不進行檢查。計算中僅使用矩陣的下三角部分。如果未指定
rtol並且A是維度為 (m, n) 的矩陣,則相對容差設定為 ,其中 是A資料型別的 epsilon 值(參見finfo)。如果未指定rtol且指定了大於零的atol,則將rtol設定為零。如果
atol或rtol是torch.Tensor,其形狀必須能廣播到torch.linalg.svdvals()返回的A的奇異值的形狀。注意
此函式有一個 NumPy 相容的變體 linalg.matrix_rank(A, tol, hermitian=False)。但是,不推薦使用位置引數
tol,而推薦使用atol和rtol。注意
如果
hermitian= False(預設),則使用奇異值分解torch.linalg.svdvals()計算矩陣的秩;當hermitian= True 時,使用特徵值分解torch.linalg.eigvalsh()計算。當輸入在 CUDA 裝置上時,此函式會將該裝置與 CPU 同步。- 引數
- 關鍵字引數
示例
>>> A = torch.eye(10) >>> torch.linalg.matrix_rank(A) tensor(10) >>> B = torch.eye(10) >>> B[0, 0] = 0 >>> torch.linalg.matrix_rank(B) tensor(9) >>> A = torch.randn(4, 3, 2) >>> torch.linalg.matrix_rank(A) tensor([2, 2, 2, 2]) >>> A = torch.randn(2, 4, 2, 3) >>> torch.linalg.matrix_rank(A) tensor([[2, 2, 2, 2], [2, 2, 2, 2]]) >>> A = torch.randn(2, 4, 3, 3, dtype=torch.complex64) >>> torch.linalg.matrix_rank(A) tensor([[3, 3, 3, 3], [3, 3, 3, 3]]) >>> torch.linalg.matrix_rank(A, hermitian=True) tensor([[3, 3, 3, 3], [3, 3, 3, 3]]) >>> torch.linalg.matrix_rank(A, atol=1.0, rtol=0.0) tensor([[3, 2, 2, 2], [1, 2, 1, 2]]) >>> torch.linalg.matrix_rank(A, atol=1.0, rtol=0.0, hermitian=True) tensor([[2, 2, 2, 1], [1, 2, 2, 2]])