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


Python SciPy linalg.pinv用法及代碼示例

本文簡要介紹 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 計算矩陣的廣義逆,並僅選取與顯著奇異值相關聯的列/行。

如果 sa 的最大奇異值,則 cut-off 值的重要性由 atol + rtol * s 確定。低於該值的任何奇異值都被假定為無關緊要。

參數

a (M, N) 數組

矩陣為pseudo-inverted。

atol 浮點數,可選

絕對閾值項,默認值為 0。

rtol 浮點數,可選

相對閾值項,默認值為 max(M, N) * eps 其中 epsa 數據類型的機器精度值。

return_rank 布爾型,可選

如果為 True,則返回矩陣的有效秩。

check_finite 布爾型,可選

是否檢查輸入矩陣是否僅包含有限數。禁用可能會提高性能,但如果輸入確實包含無窮大或 NaN,則可能會導致問題(崩潰、非終止)。

cond, rcond 浮點數,可選

在舊版本中,這些值旨在用作 atolrtol=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 = bx 解,從而最小化 ||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 條件是:

  1. ABA = A ( BA 的廣義逆),

  2. BAB = B ( AB 的廣義逆),

  3. (AB)* = AB(AB 是埃爾米特式),

  4. (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

相關用法


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