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个奇异值可以得到较好的效果了。

猜你喜欢

转载自blog.csdn.net/weixin_42039090/article/details/80529812