svdvals#
- scipy.linalg.svdvals(a, overwrite_a=False, check_finite=True)[Quelle]#
Berechnet die Singulärwerte einer Matrix.
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 zerlegende Matrix.
- overwrite_abool, optional
Ob a überschrieben werden soll; kann die Leistung verbessern. Standard ist False.
- 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:
- s(min(M, N),) ndarray
Die singulären Werte, absteigend sortiert.
- Löst aus:
- LinAlgError
Wenn die SVD-Berechnung nicht konvergiert.
Siehe auch
Beispiele
>>> import numpy as np >>> from scipy.linalg import svdvals >>> m = np.array([[1.0, 0.0], ... [2.0, 3.0], ... [1.0, 1.0], ... [0.0, 2.0], ... [1.0, 0.0]]) >>> svdvals(m) array([ 4.28091555, 1.63516424])
Wir können den maximalen singulären Wert von m überprüfen, indem wir die maximale Länge von m.dot(u) über alle Einheitsvektoren u in der (x,y)-Ebene berechnen. Wir approximieren „alle“ Einheitsvektoren mit einer großen Stichprobe. Aufgrund der Linearität benötigen wir nur die Einheitsvektoren mit Winkeln in [0, pi].
>>> t = np.linspace(0, np.pi, 2000) >>> u = np.array([np.cos(t), np.sin(t)]) >>> np.linalg.norm(m.dot(u), axis=0).max() 4.2809152422538475
p ist eine Projektionsmatrix mit Rang 1. Bei exakter Arithmetik wären ihre singulären Werte [1, 0, 0, 0].
>>> v = np.array([0.1, 0.3, 0.9, 0.3]) >>> p = np.outer(v, v) >>> svdvals(p) array([ 1.00000000e+00, 2.02021698e-17, 1.56692500e-17, 8.15115104e-34])
Die singulären Werte einer orthogonalen Matrix sind alle 1. Hier erstellen wir eine zufällige orthogonale Matrix, indem wir die Methode rvs() von
scipy.stats.ortho_groupverwenden.>>> from scipy.stats import ortho_group >>> orth = ortho_group.rvs(4) >>> svdvals(orth) array([ 1., 1., 1., 1.])