Eigen SparseMatrix 元素放入方式比較
在第一種直接對行列放入
SparseMatrixmat(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::TripletT; 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運行,但比較後,若不是要一個個修的話,建議使用第二種方式。
留言
張貼留言