orthogonal_procrustes#
- scipy.linalg.orthogonal_procrustes(A, B, check_finite=True)[Quelle]#
Berechnet die Matrixlösung des orthogonalen (oder unitären) Procrustes-Problems.
Gegeben sind Matrizen A und B gleicher Form. Findet eine orthogonale (oder unitäre im Fall von komplexen Eingaben) Matrix R, die A am besten auf B abbildet, unter Verwendung des Algorithmus aus [1].
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
Matrix, die abgebildet werden soll.
- B(M, N) array_like
Zielmatrix.
- check_finitebool, optional
Ob überprüft werden soll, ob die Eingabematrizen nur endliche Zahlen enthalten. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürzen, Nicht-Terminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.
- Rückgabe:
- R(N, N) ndarray
Die Matrixlösung des orthogonalen Procrustes-Problems. Minimiert die Frobenius-Norm von
(A @ R) - B, unter der BedingungR.conj().T @ R = I.- scaleGleitkommazahl
Summe der Singulärwerte von
A.conj().T @ B.
- Löst aus:
- ValueError
Wenn die Formen der Eingabearrays nicht übereinstimmen oder wenn check_finite True ist und die Arrays Inf oder NaN enthalten.
Hinweise
Beachten Sie, dass diese Funktion im Gegensatz zu höherstufigen Procrustes-Analysen von räumlichen Daten nur orthogonale Transformationen wie Rotationen und Spiegelungen verwendet und keine Skalierung oder Translation.
Hinzugefügt in Version 0.15.0.
Referenzen
[1]Peter H. Schonemann, „A generalized solution of the orthogonal Procrustes problem“, Psychometrica – Vol. 31, No. 1, März 1966. DOI:10.1007/BF02289451
Beispiele
>>> import numpy as np >>> from scipy.linalg import orthogonal_procrustes >>> A = np.array([[ 2, 0, 1], [-2, 0, 0]])
Drehen Sie die Reihenfolge der Spalten und prüfen Sie auf die Anti-Diagonal-Abbildung
>>> R, sca = orthogonal_procrustes(A, np.fliplr(A)) >>> R array([[-5.34384992e-17, 0.00000000e+00, 1.00000000e+00], [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00], [ 1.00000000e+00, 0.00000000e+00, -7.85941422e-17]]) >>> sca 9.0
Als Beispiel für das unitäre Procrustes-Problem generieren Sie eine zufällige komplexe Matrix
A, eine zufällige unitäre MatrixQund ihr ProduktB.>>> shape = (4, 4) >>> rng = np.random.default_rng() >>> A = rng.random(shape) + rng.random(shape)*1j >>> Q = rng.random(shape) + rng.random(shape)*1j >>> Q, _ = np.linalg.qr(Q) >>> B = A @ Q
orthogonal_procrustesstellt die unitäre MatrixQausAundBwieder her.>>> R, _ = orthogonal_procrustes(A, B) >>> np.allclose(R, Q) True