scipy.linalg.

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

svd

Berechnet die vollständige Singulärwertzerlegung einer Matrix.

diagsvd

Konstruiert die Sigma-Matrix aus dem Vektor s.

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_group verwenden.

>>> from scipy.stats import ortho_group
>>> orth = ortho_group.rvs(4)
>>> svdvals(orth)
array([ 1.,  1.,  1.,  1.])