import numpy as npA = np.linspace(0,14,15).reshape((3,-1)) # 生成0-14 3行5列print(A)def SVD(A,n):M = np.dot(A,A.T)eigval,eigvec = np.linalg.eig(M)indexs = np.argsort(-eigval)[:n]U = eigvec[:,indexs]sigma_sq = eigval[indexs]M = np.dot(A.T,A)eigval ,eigvec = np.linalg.eig(M)indexs = np.argsort(-eigval)[:n]V = eigvec[:,indexs]sigma = np.diag(np.sqrt(sigma_sq))return np.dot(np.dot(U,sigma),V.T)A_ = SVD(A,2)print(A_)print(np.linalg.norm(A_-A))
https://www.cnblogs.com/pinard/p/6251584.html
np.linalg.eig(M) 计算方阵的特征值和右特征向量。
https://numpy.org/doc/stable/reference/generated/numpy.linalg.eig.html
