本文簡要介紹 python 語言中 scipy.linalg.pinv
的用法。
用法:
scipy.linalg.pinv(a, *, atol=None, rtol=None, return_rank=False, check_finite=True, cond=<object object>, rcond=<object object>)#
計算矩陣的 (Moore-Penrose) pseudo-inverse。
在經濟模式下使用其singular-value 分解
U @ S @ V
計算矩陣的廣義逆,並僅選取與顯著奇異值相關聯的列/行。如果
s
是a
的最大奇異值,則 cut-off 值的重要性由atol + rtol * s
確定。低於該值的任何奇異值都被假定為無關緊要。- a: (M, N) 數組
矩陣為pseudo-inverted。
- atol: 浮點數,可選
絕對閾值項,默認值為 0。
- rtol: 浮點數,可選
相對閾值項,默認值為
max(M, N) * eps
其中eps
是a
數據類型的機器精度值。- return_rank: 布爾型,可選
如果為 True,則返回矩陣的有效秩。
- check_finite: 布爾型,可選
是否檢查輸入矩陣是否僅包含有限數。禁用可能會提高性能,但如果輸入確實包含無窮大或 NaN,則可能會導致問題(崩潰、非終止)。
- cond, rcond: 浮點數,可選
在舊版本中,這些值旨在用作
atol
和rtol=0
。如果兩者都給出了rcond
,則覆蓋了cond
,因此代碼不正確。因此,強烈建議不要使用這些,而是建議使用上述公差。事實上,如果提供的話,atol、rtol 優先於這些關鍵字。
- B: (N, M) ndarray
矩陣a的pseudo-inverse。
- rank: int
矩陣的有效秩。如果return_rank 為真,則返回。
- LinAlgError
如果 SVD 計算不收斂。
參數 ::
返回 ::
拋出 ::
注意:
如果
A
可逆,則Moore-Penrose 偽逆正好是A
的逆[1]。如果A
不可逆,則 Moore-Penrose 偽逆計算Ax = b
的x
解,從而最小化||Ax - b||
[1]。參考:
[1] (1,2,3)彭羅斯,R.(1956)。關於線性矩陣方程的最佳近似解。劍橋哲學會數學會刊,52(1), 17-19。號碼:10.1017/S0305004100030929
例子:
給定一個
m x n
矩陣A
和一個n x m
矩陣B
,四個 Moore-Penrose 條件是:ABA = A
(B
是A
的廣義逆),BAB = B
(A
是B
的廣義逆),(AB)* = AB
(AB
是埃爾米特式),(BA)* = BA
(BA
是埃爾米特式)[1]。
這裏,
A*
表示共軛轉置。 Moore-Penrose 偽逆是唯一的B
,它滿足所有這四個條件並且對於任何A
都存在。請注意,與標準逆矩陣不同,A
不必是方陣或具有線性獨立的列/行。例如,我們可以計算隨機非方陣的Moore-Penrose偽逆並驗證它是否滿足四個條件。
>>> import numpy as np >>> from scipy import linalg >>> rng = np.random.default_rng() >>> A = rng.standard_normal((9, 6)) >>> B = linalg.pinv(A) >>> np.allclose(A @ B @ A, A) # Condition 1 True >>> np.allclose(B @ A @ B, B) # Condition 2 True >>> np.allclose((A @ B).conj().T, A @ B) # Condition 3 True >>> np.allclose((B @ A).conj().T, B @ A) # Condition 4 True
相關用法
- Python SciPy linalg.pinvh用法及代碼示例
- Python SciPy linalg.polar用法及代碼示例
- Python SciPy linalg.pascal用法及代碼示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代碼示例
- Python SciPy linalg.cdf2rdf用法及代碼示例
- Python SciPy linalg.LaplacianNd用法及代碼示例
- Python SciPy linalg.solve_circulant用法及代碼示例
- Python SciPy linalg.clarkson_woodruff_transform用法及代碼示例
- Python SciPy linalg.rsf2csf用法及代碼示例
- Python SciPy linalg.hessenberg用法及代碼示例
- Python SciPy linalg.tril用法及代碼示例
- Python SciPy linalg.triu用法及代碼示例
- Python SciPy linalg.svd用法及代碼示例
- Python SciPy linalg.ishermitian用法及代碼示例
- Python SciPy linalg.invhilbert用法及代碼示例
- Python SciPy linalg.factorized用法及代碼示例
- Python SciPy linalg.lu_factor用法及代碼示例
- Python SciPy linalg.SuperLU用法及代碼示例
- Python SciPy linalg.lsqr用法及代碼示例
- Python SciPy linalg.cho_factor用法及代碼示例
- Python SciPy linalg.fractional_matrix_power用法及代碼示例
- Python SciPy linalg.eig_banded用法及代碼示例
- Python SciPy linalg.tanhm用法及代碼示例
- Python SciPy linalg.orthogonal_procrustes用法及代碼示例
- Python SciPy linalg.use_solver用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.linalg.pinv。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。