Eigen SparseMatrix 元素放入方式比較

 在第一種直接對行列放入

SparseMatrix mat(rows,cols); // default is column major
mat.reserve(VectorXi::Constant(cols,6));
for each i,j such that v_ij != 0
   mat.insert(i,j) = v_ij;   // alternative: mat.coeffRef(i,j) += v_ij;
mat.makeCompressed();       // optional


 第二種 放入vector中在一起放入

typedef Eigen::Triplet T;
std::vector tripletList;
tripletList.reserve(estimation_of_entries);
for(...)
{
  // ...
  tripletList.push_back(T(i,j,v_ij));
}
SparseMatrixType mat(rows,cols);
mat.setFromTriplets(tripletList.begin(), tripletList.end());
// mat is ready to go!


經實際使用在跑大約10萬個SparseMatrix時,第一種大約要5-10分鐘,第二種的話1分鐘內

兩者都是使用CPU運行,但比較後,若不是要一個個修的話,建議使用第二種方式。

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🖥️遠端桌面連線完整新手指南:Windows RDP、Chrome Remote Desktop、AnyDesk、TeamViewer 一次搞懂

如何在 Word 插入漂亮的程式碼區塊—使用Editor.md