numpy.linalg.pinv#

linalg.pinv(a, rcond=None, hermitian=False, *, rtol=<no value>)[source]#

計算矩陣的 (Moore-Penrose) 偽反矩陣。

使用奇異值分解 (SVD) 計算矩陣的廣義反矩陣,並包含所有大的奇異值。

參數:
a(…, M, N) 類陣列

要計算偽反矩陣的矩陣或矩陣堆疊。

rcond(…) 浮點數類陣列,選用

小奇異值的截止值。小於或等於 rcond * largest_singular_value 的奇異值會被設為零。會針對矩陣堆疊進行廣播。預設值:1e-15

hermitian布林值,選用

若為 True,則假設 *a* 為 Hermitian 矩陣(若為實數值則為對稱矩陣),以便更有效率地尋找奇異值。預設值為 False。

rtol(…) 浮點數類陣列,選用

與 *rcond* 相同,但它是一個與 Array API 相容的參數名稱。一次只能設定 *rcond* 或 *rtol* 其中一個。如果兩者皆未提供,則會使用 NumPy 的 1e-15 預設值。如果傳遞 rtol=None,則會使用 API 標準預設值。

版本 2.0.0 新增。

回傳值:
B(…, N, M) ndarray

*a* 的偽反矩陣。如果 *a* 是 matrix 實例,則 *B* 也是。

拋出:
LinAlgError

如果 SVD 計算不收斂。

另請參閱

scipy.linalg.pinv

SciPy 中的類似函數。

scipy.linalg.pinvh

計算 Hermitian 矩陣的 (Moore-Penrose) 偽反矩陣。

註解

矩陣 A 的偽反矩陣,記為 \(A^+\),定義為:「『解』[最小平方法問題] \(Ax = b\) 的矩陣」,亦即,如果 \(\bar{x}\) 是所述的解,則 \(A^+\) 是使得 \(\bar{x} = A^+b\) 的矩陣。

可以證明,如果 \(Q_1 \Sigma Q_2^T = A\) 是 A 的奇異值分解,則 \(A^+ = Q_2 \Sigma^+ Q_1^T\),其中 \(Q_{1,2}\) 是正交矩陣,\(\Sigma\) 是一個對角矩陣,由 A 的所謂奇異值組成(通常後面接著零),然後 \(\Sigma^+\) 僅是由 A 的奇異值的倒數組成的對角矩陣(同樣,後面接著零)。 [1]

參考文獻

[1]

G. Strang,《線性代數及其應用》,第二版,Orlando, FL, Academic Press, Inc., 1980, pp. 139-142。

範例

以下範例檢查 a * a+ * a == aa+ * a * a+ == a+

>>> import numpy as np
>>> rng = np.random.default_rng()
>>> a = rng.normal(size=(9, 6))
>>> B = np.linalg.pinv(a)
>>> np.allclose(a, np.dot(a, np.dot(B, a)))
True
>>> np.allclose(B, np.dot(B, np.dot(a, B)))
True