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運行,但比較後,若不是要一個個修的話,建議使用第二種方式。

留言

這個網誌中的熱門文章

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🛠【實戰排除教學】從 VS Code 的 _logger 錯誤,到 PowerShell 找不到 npm/serve,再到 Oracle ORA-03135 連線中斷——一次搞懂!

🔎如何在 Oracle PL/SQL 儲存過程中為文字欄位加入換行符號(CHR(10))——以 Updlcmremark 為例