【发布时间】:2023-04-11 09:13:01
【问题描述】:
到目前为止,我使用 numpy.linalg.eigvals 来计算具有至少 1000 行/列的二次矩阵的特征值,并且在大多数情况下,大约五分之一的条目非零(我不知道是否应该这样做被认为是一个稀疏矩阵)。我发现另一个 topic 表明 scipy 可能会做得更好。
但是,由于我必须计算数十万个不断增加的大型矩阵的特征值(可能多达 20000 行/列,是的,我需要它们的所有特征值),这总是需要很长时间。如果我能加快速度,哪怕只是一点点,也很可能是值得的。
所以我的问题是:在不将自己限制在 python 的情况下,有没有更快的方法来计算特征值?
【问题讨论】:
-
如果 python 不是必须的,那么任何其他低级语言(C++ / 甚至 C#)都会给你速度提升。只是一个合适的实现的问题。
-
无论您做什么,请记住,很多
numpy是一个Python 友好的包装器,围绕用C、Fortran、汇编器等语言编写的功能。我从文档中看到numpy.linalg.eigvals我是 LINPACK 库中函数的包装器。这并不意味着您找不到更快的求解器,但您可能需要超越 numpy、scipy 和 LAPACK 才能找到它们。 -
你使用迭代方法吗?如果是这样,也许您可以将它们并行化?
标签: python performance sparse-matrix eigenvalue adjacency-matrix