我有一个对称矩阵(无向图的邻接矩阵),我有一个特定的特征值(最大特征值),我想要与之相关的特征向量(左或右,任一个,因为我相信左边是简单的对称矩阵的权利转置。)
我运行的图表可以从数千个节点到数十万个节点,因此相应的邻接矩阵将很大。然而密度是稀疏的,因此相应的矩阵也将是稀疏的。
在SciPy中有一种有效的方法吗?更好的是,有没有办法只计算给定对称矩阵的前导特征值和相应的特征向量(意味着我不必用linalg.eigvals
明确地计算前导特征值。)
答案 0 :(得分:3)
是的,scipy.sparse.linalg.eigsh
,h
最后代表Hermitian,还有一个非对称矩阵的版本,scipy.sparse.linalg.eigs
。
如果a
是您的矩阵,稀疏与否,您的呼叫将类似于:
evals, evecs = scipy.sparse.linalg.eigsh(a, k=1)
您的evals
和evecs
是特征值数组和相应的特征向量,因为如果将k
设置为1以外的其他值,您可以要求多个特征值。返回哪些特征值和向量由which
参数控制,默认为LM
,代表最大幅度。