1. 特征值和特征向量
对于n阶方阵A,如果存在数a和非零n维列向量x,使得Ax=ax,则称a是矩阵A的一个特征值,x是矩阵A属于特征值a的特征向量
eg1:
import numpy as np
A = np.mat('1 6 3 7;3 8 4 6;1 4 9 5;6 8 3 5')
print('原矩阵:A=\n',A)
#提取特征值,特征向量
eigvals,eigvecs = np.linalg.eig(A)
print('特征值数组:\n',eigvals)
print('特征向量:\n',eigvecs)
#逆向推导原矩阵
A2 = eigvecs* np.diag(eigvals)*eigvecs.I
print('通过特征值特征向量反推原矩阵:A2=\n',A2)
2. 奇异值分解(svd)
有一个矩阵M,可以分解为3个矩阵U、S、V,使得U x S x V等于M。U与V都是正交矩阵(乘以自身的转置矩阵结果为单位矩阵)。那么S矩阵主对角线上的元素称为矩阵M的奇异值,其它元素均为0。
import numpy as np
M = np.mat('4 11 14; 8 7 -2')
# 奇异值分解
U, sv, V = np.linalg.svd(M, full_matrices=False)
print(U * U.T)
print(V * V.T)
print(sv)
#利用奇异值,和正交矩阵重构原矩阵。
S = np.diag(sv)
print(S)
print(U * S * V)