使用 Eigen3 的稀疏矩阵的特征值

Posted

技术标签:

【中文标题】使用 Eigen3 的稀疏矩阵的特征值【英文标题】:Eigenvalues of sparse matrix using Eigen3 【发布时间】:2015-05-14 19:52:17 【问题描述】:

是否有一种独特而有效的方法可以在 Eigen3 中找到一个真实的、对称的、非常大的(比如 10000x10000)稀疏矩阵的特征值和特征向量?有一个密集矩阵的特征值求解器,但它没有利用矩阵的属性,例如这是对称的。此外,我不想密集存储矩阵。

或者是否有更好的(+更好的文档记录)库来做到这一点?

【问题讨论】:

查看此链接以获取可以使用稀疏矩阵查找特征值的库列表:NetLib.org 这是一个不错的列表,但我担心这是最新的 这个问题与***.com/questions/30188482/…重复 只是因为被迁移了 Sparse eigenvalues using eigen3/sparse的可能重复 【参考方案1】:

假设您正在寻找 C++ 库,请查看 Armadillo。

eigs_sym() 函数似乎正是您想要的。引用文档,它:

获取稀疏对称实矩阵X的有限个特征值和特征向量

适用于您所需矩阵大小的文档中的一个最小示例:

// generate sparse matrix
sp_mat A = sprandu<sp_mat>(10000, 10000, 0.1);
sp_mat B = A.t()*A;

vec eigval;
mat eigvec;

eigs_sym(eigval, eigvec, B, 5);  // find 5 eigenvalues/eigenvectors

【讨论】:

以上是关于使用 Eigen3 的稀疏矩阵的特征值的主要内容,如果未能解决你的问题,请参考以下文章

稠密矩阵怎么转成稀疏矩阵 python

为什么稀疏密集乘法比密集稀疏乘法更快?

如何hstack几个稀疏矩阵(特征矩阵)?

来自密集的Tensorflow的稀疏矩阵

如何求稀疏矩阵的全部特征值和特征向量?

在 Julia 中,大型稀疏矩阵的 eigs() 函数出错了