【问题标题】:Numpy eigenvectors aren't eigenvectors?Numpy特征向量不是特征向量吗?
【发布时间】:2015-06-30 04:49:42
【问题描述】:

我正在做一些矩阵计算,想计算这个特定矩阵的特征值和特征向量:

我通过分析找到了它的特征值和特征向量,并想使用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,因此这个向量根本不是特征值。

我很确定矩阵 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

谁能以任何方式解释这种奇怪的行为?我误解了特征值问题吗? numpy 会不会出错?

(因为这是我在这里的第一篇文章:对于我的问题中的任何不合常规之处,我深表歉意。提前感谢您的耐心等待。)

【问题讨论】:

    标签: numpy eigenvector


    【解决方案1】:

    特征向量存储为列向量,如here 所述。所以你必须使用vecs[:,0] 而不是vecs[0]

    例如,这对我有用(我使用eig,因为A 不是对称的)

    import numpy as np
    import numpy.linalg as LA
    import numpy.random
    
    A = numpy.random.randint(10,size=(4,4))
    # array([[4, 7, 7, 7],
    #        [4, 1, 9, 1],
    #        [7, 3, 7, 7],
    #        [6, 4, 6, 5]])
    
    eval,evec = LA.eig(A)
    
    evec[:,0]
    # array([ 0.55545073+0.j,  0.37209887+0.j,  0.56357432+0.j,  0.48518131+0.j])
    
    np.dot(A,evec[:,0]) / eval[0]
    # array([ 0.55545073+0.j,  0.37209887+0.j,  0.56357432+0.j,  0.48518131+0.j])
    

    【讨论】:

    • 就是这样。 -我觉得自己像个傻瓜-非常感谢,这解决了一切!
    • @JBouman 不要觉得自己像个傻瓜,作为列而不是行的 numpy/scipy 特征向量输出是非常不规则的,并且没有很好的文档记录......我自己遇到了这个问题并在此上探索了互联网主题这是一个非常常见的错误。
    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2014-05-11
    • 2019-04-16
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多