scipy.linalg.

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 @ V im Economy-Modus und wählt nur die Spalten/Zeilen aus, die mit signifikanten Singulärwerten assoziiert sind.

Wenn s der maximale Singulärwert von a ist, dann wird der Schwellenwert für die Signifikanz bestimmt durch atol + 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, wobei eps der Wert der Maschinengenauigkeit des Datentyps von a ist.

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

pinvh

Moore-Penrose-Pseudoinverse einer hermiteschen Matrix.

Hinweise

Wenn A invertierbar ist, dann ist die Moore-Penrose-Pseudoinverse exakt die Inverse von A [1]. Wenn A nicht invertierbar ist, berechnet die Moore-Penrose-Pseudoinverse die x-Lösung zu Ax = b, sodass ||Ax - b|| minimiert wird [1].

Referenzen

[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

Beispiele

Gegeben eine m x n Matrix A und eine n x m Matrix B, sind die vier Moore-Penrose-Bedingungen:

  1. ABA = A (B ist eine verallgemeinerte Inverse von A),

  2. BAB = B (A ist eine verallgemeinerte Inverse von B),

  3. (AB)* = AB (AB ist hermitesch),

  4. (BA)* = BA (BA ist hermitesch) [1].

Hier bezeichnet A* die konjugierte Transponierte. Die Moore-Penrose-Pseudoinverse ist ein eindeutiges B, das alle vier dieser Bedingungen erfüllt und für jedes A existiert. Beachten Sie, dass im Gegensatz zur Standard-Matrixinverse A keine 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