Numpy特征向量是';t特征向量?

Numpy特征向量是';t特征向量?,numpy,eigenvector,Numpy,Eigenvector,我在做一些矩阵计算,想计算这个特殊矩阵的特征值和特征向量: 我通过分析找到了它的特征值和特征向量,并想用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)*

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

我通过分析找到了它的特征值和特征向量,并想用
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]
在我对特征值问题的理解中,这个向量似乎不足以满足方程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可能是错误的吗


(因为这是我在这里的第一篇帖子:我为我的问题中的任何不合常规之处表示歉意。提前感谢您的耐心。)

本征向量存储为所述的列向量。因此,您必须使用
vecs[:,0]
而不是
vecs[0]

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


就这样-我觉得自己像个傻瓜——非常感谢你,这解决了所有问题@JBouman不觉得自己像个傻瓜,numpy/scipy特征向量作为列而不是行的输出是非常不规则的,没有很好的文档记录……我自己也遇到过这个问题,并在互联网上探讨过这个话题,这是一个非常常见的错误。
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)
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])