def printMat(inMat, thresh=0.7):
for i in range(32):for k in range(32):
if float(inMat[i,k]) > thresh:
print (1,end=' ')
else:
print (0,end=' ')
print(end=' ')
#########################################################
def imgCompress(numSV=3, thresh=0.7):
myl = []
for line in open('d:\\0_5.txt').readlines():
newRow = []
for i in range(32):
newRow.append(int(line[i]))
myl.append(newRow)
myMat = mat(myl)
#print "****original matrix******"
printMat(myMat, thresh)
U,Sigma,VT = la.svd(myMat)
SigRecon = mat(zeros((numSV, numSV)))
for k in range(numSV):
#construct diagonal matrix from vector
SigRecon[k,k] = Sigma[k]
reconMat = U[:,:numSV]*SigRecon*VT[:numSV,:]
#print "****reconstructed matrix using %d singular values******" % numSV
print("shape(reconMat)",shape(reconMat))
printMat(reconMat,thresh)
#只需要存储U和VT以及Sigma数据,一行即可.
#降为2维,32*32 变为32*2*2 而原先32*32,所以压缩能得到1/8.
imgCompress()