【问题标题】:Finding k-smallest eigen values and its corresponding eigen vector for large matrix查找大矩阵的 k-最小特征值及其对应的特征向量
【发布时间】:2019-08-18 03:31:18
【问题描述】:

对于大小为 300,000*300,000 的对称稀疏方阵,在任何语言或包中在一小时左右的时间内找到 10 个最小特征值及其对应特征向量的最佳方法是什么。

【问题讨论】:

  • 看看这个:github.com/yixuan/spectra(我自己没试过,但这似乎正是你需要的)
  • @chtz 感谢您的帮助,但似乎它适用于 K 个最大特征值或全部。我只需要 K 个最小的特征值及其对应的向量,而不是计算所有的特征值。
  • 根据文档,它还支持计算最接近0的特征值:github.com/yixuan/spectra#shift-and-invert-mode

标签: sparse-matrix eigenvalue eigenvector


【解决方案1】:

Lanczos 算法在 Hermitian 矩阵上进行运算,是查找最小和最大特征值以及相应特征向量的一种好方法。请注意,根据定义,实对称矩阵是 Hermitian。 Lanczos 需要O(N) 存储以及大约O(N) 时间来评估极端特征值/特征向量。这与需要O(N^2) 存储和O(N^3) 运行时间的蛮力对角化形成对比。由于这个原因,Lanczos 算法为许多以前在计算上不可行的问题提供了可能的近似解决方案。

Here is a useful link 访问 UC Davis 网站,该网站列出了多种语言/包中的 Lanczos 实现,包括 FORTRAN、C/C++ 和 MATLAB。

【讨论】:

  • 谢谢。它工作完美。我的矩阵是图的拉普拉斯矩阵。当我尝试找到 k 个最小特征值时,它给了我错误:“第一个输入矩阵是奇异的。移位 0 是一个特征值。考虑对 sigma 使用非零数值”。在这种情况下,有什么办法可以计算 k 最小特征值。
  • 不确定,但也许您的数据无法与 Lanczos 很好地配合使用。
  • 不知何故,“它完美无缺”和“它给了我错误 [...]”相互矛盾。您是否按照错误提示尝试了 sigma 的非零值?
  • @chtz sigma 对应于特征值的不同选择。对于 sigma = 'sm' ,即 sigma = 0 对应于感兴趣的“最小量级”。它可以非常快地为 sigma 的其他值工作。
  • @bemma,是的,我明白这一点。您是否尝试过,例如 1e-6-1e-6? (不知道你的电动汽车有多接近零)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2020-07-29
  • 2012-08-08
  • 2019-04-27
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多