在numpy或scipy中找到真实对称矩阵的真实特征向量

时间:2015-07-22 19:59:09

标签: python numpy eigenvector

我有一个具有大量退化特征值的实对称矩阵,我想找到这个矩阵的实值特征向量。我正在努力找到一个numpy或scipy方法为我做这个,我尝试过的方法给出复杂的有价值的特征向量。有谁知道这样的功能是否存在?

3 个答案:

答案 0 :(得分:2)

使用numpy.linalg.eighscipy.linalg.eigh。这些函数是为对称(或Hermitian)矩阵设计的,并且对于实对称矩阵,它们应该总是返回实特征值和特征向量。

例如,

In [62]: from numpy.linalg import eigh

In [63]: a
Out[63]: 
array([[ 2.,  1.,  0.,  0.],
       [ 1.,  2.,  0.,  0.],
       [ 0.,  0.,  2.,  1.],
       [ 0.,  0.,  1.,  2.]])

In [64]: vals, vecs = eigh(a)

特征值在vals中,相应的特征向量在vecs列中:

In [65]: vals
Out[65]: array([ 1.,  1.,  3.,  3.])

In [66]: vecs
Out[66]: 
array([[-0.70710678,  0.        ,  0.        ,  0.70710678],
       [ 0.70710678,  0.        ,  0.        ,  0.70710678],
       [ 0.        , -0.70710678,  0.70710678,  0.        ],
       [ 0.        ,  0.70710678,  0.70710678,  0.        ]])

答案 1 :(得分:1)

易。

the docs的帮助下:

import numpy as np
from numpy import linalg as LA
a = np.array([[1, 1j], [-1j, 1]])
w, v = LA.eig(a)
# w are the eigenvalues, v are the eigenvectors
# v.real gives the real-valued parts of the eigenvectors
# v == v.real gives a boolean mask for where the vector equals its own real part
real_eigenvectors = v[v.real == v]

答案 2 :(得分:0)

vals, vecs = eigh(a)
vals = vals.real
vecs = vecs.real

应该可以。