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

问题描述:

如果我有一个1,000乘以1,000的矩形矩阵,Lapack可以计算矩阵的特征向量和特征值吗?如果它可以需要多长时间?对于10,000乘以10,000的矩阵或者甚至是1,000,000乘以1,000,000矩阵呢?我可以使用Lapack来计算大型稀疏矩阵的特征值和特征向量吗?

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

+0

我在英特尔MKL中使用LAPACK来达到同样的目的。通常我的计算是用矩阵n = 20k,m = 100m到1m。计算特征值非常快,如果您还需要所有的特征向量,则在快速PC(i7-2600,4核)上需要大约30分钟。如果你有16GB RAM,内存不是问题。 – mete 2011-05-19 13:12:24

Lapack只支持密集和带状矩阵(不支持一般稀疏矩阵)。因此,除非你的稀疏矩阵被绑定(从你的描述中,它听起来像是一个普通的稀疏矩阵,通常存储在一个压缩行存储方案中),那么lapack不是你想要使用的。

对于大型稀疏矩阵,Arpack将是一个很好的开始。

LAPACK没有内置稀疏矩阵的特殊支持,但是ARPACK可以。根据您计划运行的计算机,这可能会排除使用LAPACK,因为您可能会耗尽内存很大的矩阵。有关各种线性代数库的摘要,请参见http://www.netlib.org/utk/people/JackDongarra/la-sw.html

没有办法给你一个有意义的估计,这些计算需要多长时间,而没有你所期望的矩阵的细节(对称的将快很多倍),你打算运行这个处理器的处理器,有多少内存你有可用的,等等。

基于你的其他问题,我会建议坚持与MATLAB。它具有稀疏的矩阵支持,对于线性代数一般来说是有利的。

如果您的矩阵很稀疏,那么最好使用sparse matrix包。有关更多信息,请参阅此* article

使用lapack你可以在几秒钟内完成1000 x 1000(取决于你的机器)。 10000×10000会花费1000倍的时间,因为算法都倾向于O(n^3)。