Python中矩阵SVD分解及还原

python中SVD分解及还原:

import numpy as np
from numpy import linalg as la
S = np.zeros([5,5])
A=np.random.randint(1,25,[5,5])
u,sigma,vt = la.svd(A)
print(A)
for i in range(5):
    S[i][i] = sigma[i]
tmp = np.dot(u,S)
print(np.dot(tmp,vt))

Python中矩阵SVD分解及还原_第1张图片
第一个数组是A,第二个是用U,Sigma和VT还原的,可以看到两个矩阵是相等的
有几点需要注意的地方:
1. python中的svd分解得到的VT就是V的转置,这一点与matlab中不一样,matlab中svd后得到的是V,如果要还原的话还需要将V转置一次,而Python中不需要。
2. Python中svd后得到的sigma是一个行向量,Python中为了节省空间只保留了A的奇异值,所以我们需要将它还原为奇异值矩阵。同时需要注意的是,比如一个5*5大小的矩阵的奇异值只有两个,但是他的奇异值矩阵应该是5*5的,所以后面的我们需要手动补零,并不能直接使用diag将sigma对角化。

你可能感兴趣的:(Python)