import numpy as np
A = 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