4
我在做一些矩阵计算,想要计算出这个特殊矩阵的特征值和特征向量:Numpy特征向量不是特征向量?
我找到了它的特征向量分析,并希望确认使用numpy.linalg.eigh
我的答案,因为这个矩阵是对称的。这里的问题是:我找的预期特征值,但对应的特征向量似乎在所有
这里不是特征向量的代码的小片我用:
import numpy as n
def createA():
#create the matrix A
m=3
T = n.diag(n.ones(m-1.),-1.) + n.diag(n.ones(m)*-4.) +\
n.diag(n.ones(m-1.),1.)
I = n.identity(m)
A = n.zeros([m*m,m*m])
for i in range(m):
a, b, c = i*m, (i+1)*m, (i+2)*m
A[a:b, a:b] = T
if i < m - 1:
A[b:c, a:b] = A[a:b, b:c] = I
return A
A = createA()
ev,vecs = n.linalg.eigh(A)
print vecs[0]
print n.dot(A,vecs[0])/ev[0]
所以对于第一特征值/特征向量对,此产率:
[ 2.50000000e-01 5.00000000e-01 -5.42230975e-17 -4.66157689e-01
3.03192985e-01 2.56458619e-01 -7.84539156e-17 -5.00000000e-01
2.50000000e-01]
[ 0.14149052 0.21187998 -0.1107808 -0.35408209 0.20831606 0.06921674
0.14149052 -0.37390646 0.18211242]
以我的特征值问题的理解,看来这种载体不足以等式A.vec = ev.vec,因此,该载体是无eige在所有的nvalue。
我很肯定矩阵A本身是正确实现的,并有一个正确的特征向量。例如,我的分析导出的特征向量:
rvec = [0.25,-0.35355339,0.25,-0.35355339,0.5,-0.35355339,0.25,
-0.35355339,0.25]
b = n.dot(A,rvec)/ev[0]
print n.allclose(real,b)
产量True
。
任何人都可以通过任何方式解释这种奇怪的行为吗?我误解了特征值问题吗?可能会出现错误吗?
(由于这是我的第一篇文章在这里:。我对我的问题任何unconventionalities道歉,感谢您在您的耐心)
就是这样。 - 我觉得很傻,谢谢你,解决了一切! – JBouman
@JBouman不要觉得自己是个笨蛋,numpy/scipy本征向量作为列而不是行是非常不规则的,并且没有很好的文档记录......自己遇到这个问题并且在这个主题上探索了互联网,这是一个非常常见的错误。 –