subspace_angles#
- scipy.linalg.subspace_angles(A, B)[Quelle]#
Berechnet die Unterraumwinkel zwischen zwei Matrizen.
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
Das erste Eingabearray.
- B(M, K) array_like
Das zweite Eingabearray.
- Rückgabe:
- anglesndarray, shape (min(N, K),)
Die Unterraumwinkel zwischen den Spaltenräumen von A und B in absteigender Reihenfolge.
Hinweise
Dies berechnet die Unterraumwinkel gemäß der Formel in [1]. Für die Äquivalenz mit dem Verhalten von MATLAB und Octave verwenden Sie
angles[0].Hinzugefügt in Version 1.0.
Referenzen
[1]Knyazev A, Argentati M (2002) Principal Angles between Subspaces in an A-Based Scalar Product: Algorithms and Perturbation Estimates. SIAM J. Sci. Comput. 23:2008-2040.
Beispiele
Eine Hadamard-Matrix, die orthogonale Spalten hat, daher erwarten wir, dass der Unterraumwinkel \(\frac{\pi}{2}\) beträgt
>>> import numpy as np >>> from scipy.linalg import hadamard, subspace_angles >>> rng = np.random.default_rng() >>> H = hadamard(4) >>> print(H) [[ 1 1 1 1] [ 1 -1 1 -1] [ 1 1 -1 -1] [ 1 -1 -1 1]] >>> np.rad2deg(subspace_angles(H[:, :2], H[:, 2:])) array([ 90., 90.])
Und der Unterraumwinkel einer Matrix zu sich selbst sollte null sein
>>> subspace_angles(H[:, :2], H[:, :2]) <= 2 * np.finfo(float).eps array([ True, True], dtype=bool)
Die Winkel zwischen nicht-orthogonalen Unterräumen liegen zwischen diesen Extremen
>>> x = rng.standard_normal((4, 3)) >>> np.rad2deg(subspace_angles(x[:, :2], x[:, [2]])) array([ 55.832]) # random