我能使用Lapack计算大型稀疏矩阵的特征值和特征向量吗?

13

如果我有一个 1000x1000 的方阵,能否使用 Lapack 计算该矩阵的特征向量和特征值?如果可以,需要多长时间?对于一个 10000x10000 或甚至是 1000000x1000000 的矩阵呢?

请注意,这些将是主要由0填充的稀疏矩阵(矩阵将表示社交网络)。Lapack 是否有用于处理稀疏矩阵的特殊程序?我看到了 Arpack 推荐。但是,这是否允许计算非常大的矩阵?


我正在使用Intel MKL中的LAPACK来实现同样的目的。通常我的计算涉及到n=20k的矩阵,m在100m到1m之间。如果只需要计算特征值,速度非常快,如果还需要所有的特征向量,则在快速PC(i7-2600,4核心)上大约需要30分钟。如果您有16GB的内存,则内存不是问题。 - mete
3个回答

10
LAPACK没有对稀疏矩阵的特殊支持,但ARPACK有此功能。根据您计划运行的机器,这可能排除了使用LAPACK的可能性,因为对于非常大的矩阵,您可能会耗尽内存。请参见http://www.netlib.org/utk/people/JackDongarra/la-sw.html,以获得各种线性代数库的摘要。
没有详细说明所期望的矩阵(对称矩阵将快很多)、计划在哪种处理器上运行、可用内存等情况,无法给出这些计算需要多长时间的有意义估计。
基于您其他问题的情况,我建议坚持使用MATLAB。它支持稀疏矩阵,并且对于线性代数总体而言表现良好。

3
如果您的矩阵是稀疏矩阵,最好使用稀疏矩阵包。详细信息请参见StackOverflow 文章
使用lapack,您可以在几秒钟内处理1000x1000的矩阵(具体取决于您的计算机)。10000 x 10000的矩阵需要更长时间,因为算法通常都是O(n^3)。

1
Lapack只支持密集和带状矩阵(不支持一般稀疏矩阵)。因此,除非您的稀疏矩阵是带状的(从您的描述中看来,它应该是一般稀疏矩阵,通常存储在压缩行存储方案中),否则Lapack不是您想要使用的工具。
对于大型稀疏矩阵,Arpack是一个很好的起点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接