Was ich tun möchte: Überprüfen Sie die Singularwertzerlegung der linearen Algebra
Für die $ m $ Zeile $ n $ Spaltenmatrix $ A $
Existiert und das Folgende gilt
A=U\Sigma \overline{V^T}
Wobei die Überlagerung das komplexe Konjugat und $ ^ T $ die Transponierte ist.
A=\left(
\begin{matrix}
1 & 2 \\
3 & 4
\end{matrix}
\right)
> import numpy as np
> A = np.array([[1,2],[3,4]])
> A
array([[1, 2],
[3, 4]])
U, s, V = np.linalg.svd(A, full_matrices=True)
Es gibt drei Rückgabewerte.
> U
array([[-0.40455358, -0.9145143 ],
[-0.9145143 , 0.40455358]])
> s
array([ 5.4649857 , 0.36596619])
> V
array([[-0.57604844, -0.81741556],
[ 0.81741556, -0.57604844]])
Irgendwie fühlt es sich an, als wäre $ s $ zusammengebrochen, aber die Substanz ist nur die diagonale Komponente, das heißt,
> np.diag(s)
array([[ 5.4649857 , 0. ],
[ 0. , 0.36596619]])
Ist eine Matrix von Entitäten.
A=U\Sigma \overline{V^T}
Ich werde überprüfen.
>np.dot(np.dot(U, np.diag(s)),V)
array([[ 1., 2.],
[ 3., 4.]])
Es fühlt sich gut an ♪ ⇒ Da hier die Matrix $ V $ von der Ausführungsspalte erhalten wird, ist es nicht erforderlich, eine komplexe Konjugation durchzuführen, aber es scheint, dass diejenige, die keine Translokation nimmt, als Rückgabewert zurückgegeben wird.
> np.dot(U, U.T)
array([[ 1.00000000e+00, 2.77555756e-16],
[ 2.77555756e-16, 1.00000000e+00]])
Es ist numerisch unvermeidlich, dass ein anderer Wert als $ 0 $ an einer Stelle eingegeben wird, die keine diagonale Komponente ist.
> np.dot(V, V.T)
array([[ 1., 0.],
[ 0., 1.]])
Recommended Posts