It's time to decompose a matrix with the SVD using the following steps:
A = np.mat("4 11 14;8 7 -2") print("A ", A)
The matrix we created looks like the following:
A [[ 4 11 14] [ 8 7 -2]]
svd()
function:U, Sigma, V = np.linalg.svd(A, full_matrices=False) print("U") print(U) print("Sigma") print(Sigma) print("V") print(V)
Because of the full_matrices=False
specification, NumPy performs a reduced SVD decomposition, which is faster to compute. The result is a tuple containing the two unitary matrices U
and V
on the left and right, respectively, and the singular values of the middle matrix:
U [[-0.9486833 -0.31622777] [-0.31622777 0.9486833 ]] Sigma [ 18.97366596 9.48683298] V [[-0.33333333 -0.66666667 -0.66666667] [ 0.66666667 0.33333333 -0.66666667]]
diag()
function. Multiply the three matrices as follows:print("Product ", U * np.diag(Sigma) * V)
The product of the three matrices is equal to the matrix we created in the first step:
Product [[ 4. 11. 14.] [ 8. 7. -2.]]
We decomposed a matrix and checked the result by matrix multiplication. We used the svd()
function from the NumPy linalg
module (see decomposition.py
):
from __future__ import print_function import numpy as np A = np.mat("4 11 14;8 7 -2") print("A ", A) U, Sigma, V = np.linalg.svd(A, full_matrices=False) print("U") print(U) print("Sigma") print(Sigma) print("V") print(V) print("Product ", U * np.diag(Sigma) * V)