scipy.linalg.

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.

Siehe auch

orth
svd

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