特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。
Numpy提供了丰富的API:
import numpy as np
# 计算特征值和特征向量
x, V = np.linalg.eig(A)# 计算矩阵的行列式
det = np.linalg.det(A)# 计算方阵的逆
A_inv = np.linalg.inv(A)
import numpy as npA = np.array([[0, 1, 2, 3],[1, 0, 3, 1],[2, 3, 0, 2],[3, 1, 2, 0]])x, V = np.linalg.eig(A)V_inv = np.linalg.inv(V)print('A的行列式', np.linalg.det(A))# 注意这里:且不可使用‘*’做乘法(因为*优先使用点乘,点乘不成立,才会进行矩阵乘法)
B = np.matmul(np.matmul(V, np.diag(x)), (V_inv))print('特征值x: \n', x)print('特征向量V: \n', V)print('V_T: \n', V.T)print('V_inv: \n', V_inv)print('B: \n', B)-----------------------------输出-----------------------------------
A的行列式 9.000000000000009
特征值x:[ 6.05572176 0.15432761 -3. -3.21004937]
特征向量V:[[-5.03020107e-01 -4.75446017e-01 -7.07106781e-01 -1.44643895e-01][-4.38300211e-01 6.51958757e-01 -2.36695808e-17 -6.18742842e-01][-5.49394638e-01 3.50502424e-01 -1.50578103e-16 7.58494287e-01][-5.03020107e-01 -4.75446017e-01 7.07106781e-01 -1.44643895e-01]]
V_T:[[-5.03020107e-01 -4.38300211e-01 -5.49394638e-01 -5.03020107e-01][-4.75446017e-01 6.51958757e-01 3.50502424e-01 -4.75446017e-01][-7.07106781e-01 -2.36695808e-17 -1.50578103e-16 7.07106781e-01][-1.44643895e-01 -6.18742842e-01 7.58494287e-01 -1.44643895e-01]]
V_inv:[[-5.03020107e-01 -4.38300211e-01 -5.49394638e-01 -5.03020107e-01][-4.75446017e-01 6.51958757e-01 3.50502424e-01 -4.75446017e-01][-7.07106781e-01 -8.99464510e-16 8.86986655e-16 7.07106781e-01][-1.44643895e-01 -6.18742842e-01 7.58494287e-01 -1.44643895e-01]]
B:
[[ 1.71102595e-15 1.00000000e+00 2.00000000e+00 3.00000000e+00][ 1.00000000e+00 9.30160211e-16 3.00000000e+00 1.00000000e+00][ 2.00000000e+00 3.00000000e+00 -2.20312258e-16 2.00000000e+00][ 3.00000000e+00 1.00000000e+00 2.00000000e+00 1.88043220e-15]]