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