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 == a
和a+ * 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