本征稀疏矩阵乘法似乎计算全矩阵

问题描述:

我想乘以2个本征稀疏矩阵。代码如下:本征稀疏矩阵乘法似乎计算全矩阵

Eigen::SparseMatrix<float> SpMat; 
SpMat mat_1; 
mat_1.resize(n_e, n_e); 
... Fill the matrix. It is sparse 

SpMat mat_2; 
mat_1.resize(n_e, n_e); 
... Fill the matrix. It is sparse 

SpMat mat_3 = (mat_1 * mat_2).pruned(); 

这正常为小矩阵,但对于较大的矩阵,它只是运行,并且运行十个崩溃了赛格故障。在Matlab中同样的事情需要几秒钟。所以,我想知道它是否试图将整个矩阵保留在某个地方。如果确实如此,那真的很糟糕!我查看了文档,并且这样做是它建议在运行中修剪矩阵的原因。

+0

好吧,看来我不应该使用pruned()。它运作良好没有它,但我不知道为什么作为文档明确指出使用它:http://eigen.tuxfamily.org/dox-devel/group__TutorialSparse.html 请参阅矩阵产品部分... – Luca 2014-11-24 15:06:48

+0

你也试过'而不是(变成另一个)(SOME_SMALL_NUMBER)'?也许在这里有很大的舍入错误,它会阻止pruned()有效地运行。 – davidhigh 2014-11-24 17:57:39

基本上,该文件至少对我来说是很迷惑的。

做到这一点的方法就是:在前进的道路上创造

SpMat mat_3 = mat_1 * mat_2 

没有密集矩阵。

特征石!