當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy linalg.matrix_rank用法及代碼示例


本文簡要介紹 python 語言中 numpy.linalg.matrix_rank 的用法。

用法:

linalg.matrix_rank(A, tol=None, hermitian=False)

使用 SVD 方法返回數組的矩陣秩

數組的秩是數組中大於 tol 的奇異值的數量。

參數

A {(M,), (…, M, N)} 數組

輸入向量或矩陣堆棧。

tol (…)數組,浮點數,可選

低於該閾值的 SVD 值被視為零。如果tol是無,並且S是一個具有奇異值的數組M, 和eps是數據類型的 epsilon 值S, 然後tol被設定為S.max() * max(M, N) * eps.

hermitian 布爾型,可選

如果為真,則 A 被假定為 Hermitian(如果為實值則對稱),從而可以使用更有效的方法來查找奇異值。默認為 False。

返回

rank (…)數組

A級。

注意

檢測排名缺陷的默認閾值是對奇異值大小的測試A。默認情況下,我們識別小於的奇異值S.max() * max(M, N) * eps表示等級不足(使用上麵定義的符號)。這是 MATLAB 使用的算法 [1]。它也出現在數字食譜在討論線性最小二乘的 SVD 解決方案 [2]。

此默認閾值旨在檢測考慮 SVD 計算數值錯誤的排名缺陷。想象一下 A 中的一列是 A 中其他列的精確(浮點)線性組合。計算 A 上的 SVD 通常不會產生完全等於 0 的奇異值:最小 SVD 值的任何差異從 0 開始是由於 SVD 計算中的數值不精確造成的。我們針對小 SVD 值的閾值考慮了這種數值不精確性,默認閾值將檢測這種數值排名缺陷。即使 A 的某些列的線性組合不完全等於 A 的另一列,而隻是在數值上非常接近 A 的另一列,閾值也可以聲明矩陣 A 秩不足。

我們選擇默認閾值是因為它被廣泛使用。其他閾值也是可能的。例如,2007 年版的其他地方數字食譜還有一個替代閾值S.max() * np.finfo(A.dtype).eps / 2. * np.sqrt(m + n + 1.).作者將此閾值說明為基於“expected roundoff error”(第 71 頁)。

上述閾值處理 SVD 計算中的浮點舍入誤差。但是,您可能有更多關於 A 中錯誤來源的信息,這將使您考慮使用其他容差值來檢測有效秩不足。最有用的公差度量取決於您打算在矩陣上使用的操作。例如,如果您的數據來自不確定性大於浮點 epsilon 的不確定性測量,則選擇接近該不確定性的容差可能更可取。如果不確定性是絕對的而不是相對的,則容差可能是絕對的。

參考

1

MATLAB 參考文檔,“Rank”https://www.mathworks.com/help/techdoc/ref/rank.html

2

W. H. Press、S. A. Teukolsky、W. T. Vetterling 和 B. P. Flannery,“數值食譜(第 3 版)”,劍橋大學出版社,2007 年,第 795 頁。

例子

>>> from numpy.linalg import matrix_rank
>>> matrix_rank(np.eye(4)) # Full rank matrix
4
>>> I=np.eye(4); I[-1,-1] = 0. # rank deficient matrix
>>> matrix_rank(I)
3
>>> matrix_rank(np.ones((4,))) # 1 dimension - rank 1 unless all 0
1
>>> matrix_rank(np.zeros((4,)))
0

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.linalg.matrix_rank。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。