本征分解让我想知道 numpy
Eigendecomposition makes me wonder in numpy
我检验了 A = Q * Lambda * Q_inverse 的定理,其中 Q 是具有特征向量的矩阵,而 Lambda 是具有对角线上特征值的对角矩阵。
我的代码如下:
import numpy as np
from numpy import linalg as lg
Eigenvalues, Eigenvectors = lg.eigh(np.array([
[1, 3],
[2, 5]
]))
Lambda = np.diag(Eigenvalues)
Eigenvectors @ Lambda @ lg.inv(Eigenvectors)
哪个 returns :
array([[ 1., 2.],
[ 2., 5.]])
返回的矩阵不应该和分解后的原始矩阵一样吗?
您正在使用用于 symmetric/Hermitian 矩阵的函数 linalg.eigh,您的矩阵不是对称的。
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.linalg.eigh.html
你需要使用linalg.eig,你会得到正确的结果:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html
import numpy as np
from numpy import linalg as lg
Eigenvalues, Eigenvectors = lg.eig(np.array([
[1, 3],
[2, 5]
]))
Lambda = np.diag(Eigenvalues)
Eigenvectors @ Lambda @ lg.inv(Eigenvectors)
returns
[[ 1. 3.]
[ 2. 5.]]
符合预期。
我检验了 A = Q * Lambda * Q_inverse 的定理,其中 Q 是具有特征向量的矩阵,而 Lambda 是具有对角线上特征值的对角矩阵。
我的代码如下:
import numpy as np
from numpy import linalg as lg
Eigenvalues, Eigenvectors = lg.eigh(np.array([
[1, 3],
[2, 5]
]))
Lambda = np.diag(Eigenvalues)
Eigenvectors @ Lambda @ lg.inv(Eigenvectors)
哪个 returns :
array([[ 1., 2.],
[ 2., 5.]])
返回的矩阵不应该和分解后的原始矩阵一样吗?
您正在使用用于 symmetric/Hermitian 矩阵的函数 linalg.eigh,您的矩阵不是对称的。
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.linalg.eigh.html
你需要使用linalg.eig,你会得到正确的结果:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html
import numpy as np
from numpy import linalg as lg
Eigenvalues, Eigenvectors = lg.eig(np.array([
[1, 3],
[2, 5]
]))
Lambda = np.diag(Eigenvalues)
Eigenvectors @ Lambda @ lg.inv(Eigenvectors)
returns
[[ 1. 3.]
[ 2. 5.]]
符合预期。