pinv#
- scipy.linalg.pinv(a, *, atol=None, rtol=None, return_rank=False, check_finite=True)[source]#
計算矩陣的 (Moore-Penrose) 偽反矩陣。
使用奇異值分解
U @ S @ V
的經濟模式計算矩陣的廣義反矩陣,並且僅選取與顯著奇異值相關聯的列/行。如果
s
是a
的最大奇異值,則顯著性截止值由atol + rtol * s
確定。任何低於此值的奇異值都被認為是不顯著的。- 參數:
- a(M, N) 類陣列
要計算偽反矩陣的矩陣。
- atolfloat,可選
絕對閾值項,預設值為 0。
在版本 1.7.0 中新增。
- rtolfloat,可選
相對閾值項,預設值為
max(M, N) * eps
,其中eps
是a
資料類型的機器精度值。在版本 1.7.0 中新增。
- return_rankbool,可選
如果為 True,則返回矩陣的有效秩。
- check_finitebool,可選
是否檢查輸入矩陣是否僅包含有限數字。 停用可能會提高效能,但如果輸入包含無限或 NaN,可能會導致問題(崩潰、無法終止)。
- 返回:
- B(N, M) ndarray
矩陣 a 的偽反矩陣。
- rankint
矩陣的有效秩。 如果 return_rank 為 True,則返回。
- 引發:
- LinAlgError
如果 SVD 計算不收斂。
另請參閱
pinvh
Hermitian 矩陣的 Moore-Penrose 偽反矩陣。
註解
如果
A
是可逆的,則 Moore-Penrose 偽反矩陣正好是A
的反矩陣 [1]。 如果A
不可逆,則 Moore-Penrose 偽反矩陣計算Ax = b
的x
解,使得||Ax - b||
最小化 [1]。參考文獻
範例
給定一個
m x n
矩陣A
和一個n x m
矩陣B
,Moore-Penrose 條件如下ABA = A
(B
是A
的廣義反矩陣 ),BAB = B
(A
是B
的廣義反矩陣 ),(AB)* = AB
(AB
是 Hermitian 矩陣 ),(BA)* = BA
(BA
是 Hermitian 矩陣 ) [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