SciPy - 计算对称矩阵中特定特征值的特征向量

2 投票
1 回答
2721 浏览
提问于 2025-04-17 13:35

我有一个对称矩阵(这是一个无向图的邻接矩阵),我知道一个特定的特征值(最大特征值),现在我想找到和这个特征值对应的特征向量(左特征向量或右特征向量都可以,因为我认为对于对称矩阵,左特征向量只是右特征向量的转置)。

我正在处理的图的节点数量从几千到几十万个,所以相应的邻接矩阵会很大。不过,这些图的稀疏性很高,所以对应的矩阵也会是稀疏的。

在SciPy中有没有高效的方法来做到这一点?更好的是,有没有办法只计算给定对称矩阵的主特征值和对应的特征向量(也就是说,我不需要自己用linalg.eigvals来显式计算主特征值)。

1 个回答

3

是的,有这个功能,scipy.sparse.linalg.eigsh,这里的 h 代表的是厄米矩阵,另外还有一个适用于非对称矩阵的版本,scipy.sparse.linalg.eigs

如果 a 是你的矩阵,不管是稀疏矩阵还是普通矩阵,你的调用方式大概是这样的:

evals, evecs = scipy.sparse.linalg.eigsh(a, k=1)

你的 evalsevecs 是特征值和对应特征向量的数组,因为你可以通过把 k 设置为大于1的值来请求多个特征值和特征向量。返回哪些特征值和特征向量是通过 which 参数来控制的,默认值是 LM,代表的是 最大绝对值

撰写回答