我想有效地(尽可能)可靠地找到非负矩阵的 Perron-Frobenius 特征向量。这些不是随机矩阵,它们通常是密集的,并且它们的条目相差许多数量级。它们可能通常是不可约的,但如果您认为非常小的条目为零,它们将不会是。它们不是对称的。它们将尽可能大,我可以在笔记本电脑上以合理的计算时间制作它们。
我不是一个数字人,到目前为止,我倾向于将特征向量例程视为“后备箱”。但是,在这种情况下,我尝试过的现成解决方案都不能很好地工作。linalg.eig
对于大于 的矩阵,Numpy 的速度非常慢左右,大概是因为它总是计算每个特征向量,而不仅仅是顶部的。此外,具有最大实部的特征值通常不对应于具有所有非负(甚至实数)条目的特征向量,这会搞砸一切。另一方面,scipy.sparse.linalg.eigs
它在工作时很棒(尽管我的矩阵很密集),但有时无论我做什么,我都无法让它收敛。
我尝试自己实现幂迭代,但它非常慢,而且还存在收敛问题——这让我觉得真的应该有更好的方法。
理想情况下,我想要一个具有以下属性的算法:
- 比幂次迭代更快并且具有更好的收敛性
- 能够在无法收敛的情况下给我某种近似解决方案
- 保证不给我除 Perron-Frobenius 之外的任何特征向量,即不给我具有复杂元素或正负混合的东西
- 能够同时计算左右 Perron-Frobenius 特征向量,如果这比简单地运行两次更有效的话
- 要么是现成的(用 Python 或其他语言),要么以我作为非数字人可以理解如何实现它而不必过多担心其背后的理论的形式进行解释
这样的事情存在吗?也欢迎参考文献提供如何解决此类问题的概述,因为我确信我不是第一个需要这样做的人。