pinv#
- scipy.linalg.pinv(a, *, atol=None, rtol=None, return_rank=False, check_finite=True)[Quelltext]#
Berechnet die (Moore-Penrose-)Pseudoinverse einer Matrix.
Berechnet eine verallgemeinerte Inverse einer Matrix unter Verwendung ihrer Singulärwertzerlegung
U @ S @ Vim Economy-Modus und wählt nur die Spalten/Zeilen aus, die mit signifikanten Singulärwerten assoziiert sind.Wenn
sder maximale Singulärwert vonaist, dann wird der Schwellenwert für die Signifikanz bestimmt durchatol + rtol * s. Jeder Singulärwert unterhalb dieses Werts wird als insignifikant angenommen.Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.
- Parameter:
- a(M, N) array_like
Zu invertierende Matrix.
- atolfloat, optional
Absoluter Schwellenwertterm, Standardwert ist 0.
Hinzugefügt in Version 1.7.0.
- rtolfloat, optional
Relativer Schwellenwertterm, Standardwert ist
max(M, N) * eps, wobeiepsder Wert der Maschinengenauigkeit des Datentyps vonaist.Hinzugefügt in Version 1.7.0.
- return_rankbool, optional
Wenn True, wird der effektive Rang der Matrix zurückgegeben.
- check_finitebool, optional
Ob überprüft werden soll, ob die Eingabematrix nur endliche Zahlen enthält. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürze, Nichtterminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.
- Rückgabe:
- B(N, M) ndarray
Die Pseudoinverse der Matrix a.
- rankint
Der effektive Rang der Matrix. Wird zurückgegeben, wenn return_rank True ist.
- Löst aus:
- LinAlgError
Wenn die SVD-Berechnung nicht konvergiert.
Siehe auch
pinvhMoore-Penrose-Pseudoinverse einer hermiteschen Matrix.
Hinweise
Wenn
Ainvertierbar ist, dann ist die Moore-Penrose-Pseudoinverse exakt die Inverse vonA[1]. WennAnicht invertierbar ist, berechnet die Moore-Penrose-Pseudoinverse diex-Lösung zuAx = b, sodass||Ax - b||minimiert wird [1].Referenzen
Beispiele
Gegeben eine
m x nMatrixAund einen x mMatrixB, sind die vier Moore-Penrose-Bedingungen:ABA = A(Bist eine verallgemeinerte Inverse vonA),BAB = B(Aist eine verallgemeinerte Inverse vonB),(AB)* = AB(ABist hermitesch),(BA)* = BA(BAist hermitesch) [1].
Hier bezeichnet
A*die konjugierte Transponierte. Die Moore-Penrose-Pseudoinverse ist ein eindeutigesB, das alle vier dieser Bedingungen erfüllt und für jedesAexistiert. Beachten Sie, dass im Gegensatz zur Standard-MatrixinverseAkeine quadratische Matrix sein oder linear unabhängige Spalten/Zeilen haben muss.Als Beispiel können wir die Moore-Penrose-Pseudoinverse einer zufälligen nicht-quadratischen Matrix berechnen und überprüfen, ob sie die vier Bedingungen erfüllt.
>>> 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