2014-11-24 254 views
0

我想乘以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

回答

0

基本上,該文件至少對我來說是很迷惑的。

做到這一點的方法就是:在前進的道路上創造

SpMat mat_3 = mat_1 * mat_2 

沒有密集矩陣。

特徵石!