scipy.linalg.

pinv#

scipy.linalg.pinv(a, *, atol=None, rtol=None, return_rank=False, check_finite=True)[source]#

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

使用奇異值分解 U @ S @ V 的經濟模式計算矩陣的廣義反矩陣,並且僅選取與顯著奇異值相關聯的列/行。

如果 sa 的最大奇異值,則顯著性截止值由 atol + rtol * s 確定。任何低於此值的奇異值都被認為是不顯著的。

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

要計算偽反矩陣的矩陣。

atolfloat,可選

絕對閾值項,預設值為 0。

在版本 1.7.0 中新增。

rtolfloat,可選

相對閾值項,預設值為 max(M, N) * eps,其中 epsa 資料類型的機器精度值。

在版本 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 = bx 解,使得 ||Ax - b|| 最小化 [1]

參考文獻

[1] (1,2,3)

Penrose, R. (1956). On best approximate solutions of linear matrix equations. Mathematical Proceedings of the Cambridge Philosophical Society, 52(1), 17-19. doi: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 是 Hermitian 矩陣 ),

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