def efficacite(M): n = len(M) QL, BD, QR = bi.bi_diagonal(M, 0) U, S, V = qr.transfo_USV(BD, 100) U, S = qr.ordre_vp(U, S) x = range(n-1, 0, -1) distances = [] for i in x: S[i][i] = 0 M_comp = np.dot(QL,np.dot(U, np.dot(S, np.dot(V, QR)))) distances += [norme(M - M_comp)] pl.plot(x[::-1], distances[::-1]) pl.xlabel("Rang de compression k") pl.ylabel("Efficacite de la compression") pl.show()
def compress(M, k): n = len(M) QL, BD, QR = bi.bi_diagonal(M, 0) U, S, V = qr.transfo_USV(BD, 100) U, S = qr.ordre_vp(U, S) if (k < n): for i in range(k + 1, n): S[i][i] = 0 res = np.dot(QL,np.dot(U, np.dot(S, np.dot(V, QR)))) for i in range(n): for j in range(n): if (res[i][j] > 1): res[i][j] = 1 if (res[i][j] < 0): res[i][j] = 0 return res