SciPy - 计算对称矩阵中特定特征值的特征向量
我有一个对称矩阵(这是一个无向图的邻接矩阵),我知道一个特定的特征值(最大特征值),现在我想找到和这个特征值对应的特征向量(左特征向量或右特征向量都可以,因为我认为对于对称矩阵,左特征向量只是右特征向量的转置)。
我正在处理的图的节点数量从几千到几十万个,所以相应的邻接矩阵会很大。不过,这些图的稀疏性很高,所以对应的矩阵也会是稀疏的。
在SciPy中有没有高效的方法来做到这一点?更好的是,有没有办法只计算给定对称矩阵的主特征值和对应的特征向量(也就是说,我不需要自己用linalg.eigvals
来显式计算主特征值)。
1 个回答
3
是的,有这个功能,scipy.sparse.linalg.eigsh
,这里的 h
代表的是厄米矩阵,另外还有一个适用于非对称矩阵的版本,scipy.sparse.linalg.eigs
。
如果 a
是你的矩阵,不管是稀疏矩阵还是普通矩阵,你的调用方式大概是这样的:
evals, evecs = scipy.sparse.linalg.eigsh(a, k=1)
你的 evals
和 evecs
是特征值和对应特征向量的数组,因为你可以通过把 k
设置为大于1的值来请求多个特征值和特征向量。返回哪些特征值和特征向量是通过 which
参数来控制的,默认值是 LM
,代表的是 最大绝对值。