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