python -SVD分解

from numpy import *
import numpy as np
def loadExData():
    return [[1,1,1,0,0],
            [2,2,2,0,0],
            [1,1,1,0,0],
            [5,5,5,0,0],
            [1,1,0,2,2],
            [0,0,0,3,3],
            [0,0,0,1,1]]
data=loadExData()
#data=[[1,1],[7,7]]
U,sigma,VT=np.linalg.svd(data)
#print(U)
#print(VT)
print(sigma)
def cmpData(U,sigma,VT,n):#功能实现输出3个奇异值、4个奇异值、5个奇异值情况,进行数据比较。
    m=shape(sigma)
    m=m[0]
    if(n>m):
        print("参数有错误!")
        return
    sig=ones((n,n))
    for i in range(n):
        sig[i][i]=sigma[i]
    sig5=mat(sig)
#   sig5=mat([[sigma[0],0,0,0,0],
#              [0,sigma[1],0,0,0],
#              [0,0,sigma[2],0,0],
#              [0,0,0,sigma[3],0],
#              [0,0,0,0,sigma[4]]])
    print("U[:,:{}]:{}".format(n,U[:,:n]))
    print("VT[:{},:]:{}".format(n,VT[:n,:]))
    reStore_data=U[:,:n]*sig5*VT[:n,:]
    print("reStore_data",reStore_data)

for yy in [3,4,5]:cmpData(U,sigma,VT,yy)

通过以上比较可以知道,取3个奇异值可以得到较好的效果了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值