计算大型矩阵特征值的最快方法
到目前为止,我使用numpy.linalg.eigvals来计算至少有1000行/列的二次矩阵的特征值,并且在大多数情况下,大约有五分之一的条目为非零值(我不知道是否应该将其视为稀疏矩阵)。我发现另一个主题表明scipy可以做得更好。
但是,由于我必须为成千上万个增大大小的大型矩阵(可能最多20000行/列,是的,我需要它们的所有特征值)计算特征值,因此这总是要花很长的时间。如果我可以加快速度,甚至只是最微小的速度,那么很可能值得付出努力。
所以我的问题是:当不将自己限制在python时,有没有一种更快的方法来计算特征值?
回答:
@HighPerformanceMark在注释中是正确的,因为numpy背后的算法(LAPACK等)是一些最好的,但可能不是最先进的数字算法,用于对角化整个矩阵。但是,如果您具有以下条件,则可以
大大 加快操作速度:
回答:
如果您的矩阵是稀疏的,即填充条目的数量为k,k<<N**2
则应查看scipy.sparse
。
回答:
有许多算法可用于处理特定带状结构的矩阵。在中签出求解器scipy.linalg.solve.banded
。
回答:
大多数时候,您实际上并不 需要
所有的特征值。实际上,大多数物理信息来自最大的特征值,其余的仅仅是高频振荡,只是瞬时的。在这种情况下,您应该研究能够快速收敛到最大特征值/向量的特征值解,例如Lanczos算法。
以上是 计算大型矩阵特征值的最快方法 的全部内容, 来源链接: utcz.com/qa/401663.html