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

Joe*_*sen 4 python numpy eigenvector

我有一个具有很多简并特征值的实对称矩阵,我想找到该矩阵的实值特征向量。我正在努力寻找 numpy 或 scipy 中的一种方法来为我做到这一点,我尝试过的方法给出了复值特征向量。有谁知道这样的功能是否存在?

War*_*ser 5

使用numpy.linalg.eighscipy.linalg.eigh. 这些函数是为对称(或埃尔米特)矩阵设计的,对于实数对称矩阵,它们应始终返回实数特征值和特征向量。

例如,

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)
Run Code Online (Sandbox Code Playgroud)

特征值在 中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.        ]])
Run Code Online (Sandbox Code Playgroud)