我有以下问题。有一个大小为A
的矩阵NxN
,其中N = 200 000
。它非常稀疏,每行中都有M
个元素,其中M={6, 18, 40, 68, 102}
(我有5种不同的场景),其余为0。
现在我想获得矩阵A
的所有特征值和特征向量。
问题是,我不能将矩阵A
放入内存,因为它大约是160 GB的数据。我正在寻找的是一个软件,它允许很好地存储稀疏矩阵(没有零,我的矩阵只有几MB),然后把这个存储的矩阵没有零地放到计算特征值和向量的算法中。
你们中的任何人都可以向我推荐一款软件吗?
编辑:我发现我可以重新配置我的矩阵A
,因此它变成了一个带矩阵。然后我可以使用LAPACK
来获取特征值和特征向量(具体地说:http://software.intel.com/sites/products/documentation/doclib/iss/2013/mkl/mklman/GUID-D3C929A9-8E33-4540-8854-AA8BE61BB08F.htm)。问题是,我需要所有向量,并且由于我的矩阵是NxN
,我不能允许LAPACK
将解(所有特征向量)存储在内存中。最好的方法是给我第一个K特征向量的函数,然后我重新运行程序以获得下一个K特征向量,依此类推,所以我可以将结果保存在文件中。
答案 0 :(得分:1)
您可以尝试使用SLEPC库http://www.grycap.upv.es/slepc/description/summary.htm:
" SLEPc是特征值问题计算的可扩展库,是一个用于解决并行计算机上大型稀疏特征问题的软件库。"
阅读其用户的第二章" EPS:特征值问题解决者"。他们专注于保持稀缺性的方法......但是计算了有限数量的特征值和特征向量。
我希望我们的矩阵具有良好的性质(例如肯定的......)。
EPSIsPositive(EPS eps,PetscBool *pos);
您可能会对光谱切片感兴趣。计算给定区间内的所有特征值...或者您可以设置目标并计算该目标周围最接近的特征值。
参见示例http://www.grycap.upv.es/slepc/documentation/current/src/eps/examples/tutorials/index.html
为什么需要为这么大的矩阵计算所有特征向量?
再见,