我有一个对称矩阵(无向图的邻接矩阵),我有一个特定的特征值(最大特征值),我想要与之关联的特征向量(左或右,任何一个,因为我相信左边只是对称矩阵右边的转置)。
我正在运行的图形可以从数千个节点增加到数十万个节点,因此相应的邻接矩阵会很大。然而,密度是稀疏的,所以相应的矩阵也会稀疏。
在 SciPy 中是否有有效的方法可以做到这一点?更好的是,有没有办法只计算给定对称矩阵的前导特征值和相应的特征向量(这意味着我不必自己用 linalg.eigvals
显式计算前导特征值)。
是的,scipy.sparse.linalg.eigsh
,最后的h
代表埃尔米特,还有一个非对称矩阵的版本,scipy.sparse.linalg.eigs
.
如果a
是你的矩阵,无论是否稀疏,你的调用将如下所示:
evals, evecs = scipy.sparse.linalg.eigsh(a, k=1)
您的evals
和evecs
是特征值和相应特征向量的数组,因为如果将k
设置为 1 以外的值,您可以要求多个 if 值。返回的特征值和向量由 which
参数控制,该参数默认为 LM
,代表最大量级。