SVD矩阵分解
import numpy as np
class SVD:
def __init__(self,x):
self.x = np.array(x)
def get_r_rv(self,x):
x = np.array(x)
s_matrix = x.T.dot(x)
r_list, r_v = np.linalg.eig(s_matrix)
return r_list,r_v
def get_matrix_rank(self):
return np.linalg.matrix_rank(self.x)
def get_V_M(self,x):
r_list, r_v = self.get_r_rv(x)
index_rank = np.argsort(-r_list)
r_list = r_list[index_rank]
r_list_ = r_list[r_list > 0]
r_max = len(r_list_)
V = r_v[:,index_rank]
m = np.zeros((r_max,r_max))
U = np.zeros((self.x.shape[0],r_max))
for i in range(r_max):
m[i][i