提问者:小点点

稀疏矩阵的高效内存小特征值算法


我正在编写一些Java软件,它需要计算正定对称稀疏矩阵的特征值和特征向量。我不需要所有的特征值,但我最感兴趣的是小特征值。问题是:

1)出于测试目的,我的代码需要在笔记本电脑上运行(四核,4gb内存)

2) 测试数据涉及大矩阵——通常超过10000乘以10000

这两个约束意味着大多数常用的Java matrix包都不足以满足我当前的需求——我甚至不能在内存中存储密集的10000乘10000的矩阵,更不用说用它们进行计算了。

所以我的问题是:当进行矩阵计算时,人们如何处理内存约束?我的矩阵通常非常稀疏——通常只有5%的条目是非零的。是否有算法利用了这一点?我是否可以将矩阵存储在硬盘上,一次只加载其中的一部分,以减轻RAM的压力?


共1个答案

匿名用户

您可以尝试使用la4j库:

// Compressed Sparse Row Matrix
Matrix a = new CRSMatrix(...); 

// eigen[0] = P, eigen[1] = D
Matrix eigen[] = a.decompose(Matrices.EIGEN_DECOMPOSITOR);