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))

这里写图片描述
第一个数组是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对角化。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值