from numpy import *

im = genfromtxt('image.csv')

# Decomposition en valeurs singulières
U, s, Vs = linalg.svd(im, full_matrices=True)

# Dimension des matrices
U.shape
s.shape
Vs.shape

# s est un vecteur, on reconstruit une matrice diagonale
S = zeros((115,130))
S[:115,:115] = diag(s)

r = array([1, 2, 4, 8, 16, 32, 64, 115])
for k in r:
    SS = zeros((115,130))
    SS[:k,:k] = diag(s[:k])
    
    # matrice de rang r
    MM = dot(U,dot(SS,Vs))
    
    print 'r = {r}, rang de MM = {rang}'.format(r=k,rang=linalg.matrix_rank(MM))
    
    fname = 'svd_rank_{r}.csv'.format(r=k)
    savetxt(fname,MM)

