1

我正在尝试使用 Eigen 将两个大小为 300k * 1000k 和 1000k*300k 的大型稀疏矩阵相乘。矩阵高度稀疏~0.01% 非零条目,但是在它们的稀疏性中没有块或其他结构。

事实证明,Eigen 阻塞并最终占用了 55-60G 的内存。实际上,它使最终的矩阵变得密集,这解释了为什么它需要这么多内存。

当矩阵之一是对角线并且乘法工作正常时,我尝试将类似大小的矩阵相乘,并且内存约为 2-3 G。

对出了什么问题有任何想法吗?

4

1 回答 1

2

即使您的矩阵是稀疏的,结果也可能是完全密集的。您可以尝试删除最小条目,(A*B).prune(ref,eps);其中 ref 是非零的参考值,而 eps 是容差值。基本上,所有小于 ref*eps 的条目都将在计算乘积期间被删除,从而减少内存使用和结果大小。更好的选择是找到一种方法来避免执行此产品。

于 2013-09-20T07:21:03.817 回答