numpy 我怎样才能得到更多的有效数字的特征值和特征向量的问题?

rqdpfwrv  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在用Python计算一个矩阵的特征值和特征向量,我使用了numpy,作为一个例子,我用矩阵M来计算:

w,v=eig(M)
idx = w.argsort()[::1]   
eigVal= w[idx]
eigVec = v[:,idx]
print(eigVal)
print("an eigen vector is:")
print(eigVec[0])
print()
nnn=M.dot(eigVec[0]) #matrix times supposed eigen vector
for i in range(lenght):
  nnn[i]=nnn[i]/eigVal[0]
print("The result of M*vector/eigenvalue is:")
print(nnn)

并得到结果:

[452.78324098 461.88198554 468.47201706 474.43054819]
an eigen vector is:
[ 0.92852341  0.37084248 -0.01780576  0.00175573]

The result of M*vector/eigenvalue is:
[ 9.28755114e-01  3.72671398e-01 -2.29673727e-02 -9.27549232e-05]

正如你所看到的,虽然相似,但相乘后得到的特征向量并不那么接近numpy最初计算的结果,如何提高精度?

6rqinv9w

6rqinv9w1#

你需要沿着右轴取特征向量;

w,v=eig(M)
idx = w.argsort()[::1]   
eigVal= w[idx]
eigVec = np.transpose(v[:,idx]) # <-- transpose here
print(eigVal)
print("an eigen vector is:")
print(eigVec[0])
print()
nnn=M.dot(eigVec[0]) #matrix times supposed eigen vector
nnn /= eigVal[0]
print("The result of M*vector/eigenvalue is:")
print(nnn)

相关问题