У меня есть разреженная матрица, и мне нужно хранить ненулевые элементы и соответствующие строки, столбцы в порядке возрастания по отношению к строкам
после этого https://eigen.tuxfamily.org/dox/group__TutorialSparse.html Я пытался
// mat =
// 1.0, 0.0, 1.0, 0.0, 0.0
// 1.0, 0.0, 0.0, 0.0, 1.0
// 0.0, 1.0, 0.0, 0.0, 0.0
// 0.0, 0.0, 1.0, 0.0, 1.0
// 1.0, 0.0, 0.0, 1.0, 0.0
// create and fill the sparse matrix
SparseMatrix<double> mat(5,5);
mat.insert(0,0) = 1.0;
mat.insert(0,2) = 1.0;
mat.insert(1,0) = 1.0;
mat.insert(1,4) = 1.0;
mat.insert(2,1) = 1.0;
mat.insert(3,2) = 1.0;
mat.insert(3,4) = 1.0;
mat.insert(4,0) = 1.0;
mat.insert(4,3) = 1.0;
//matrix where to store the row,col,value
Eigen::MatrixXd mat_map(mat.nonZeros(),3);
int index_mat;
index_mat=-1;
for (int k=0; k<mat.outerSize(); ++k)
for (SparseMatrix<double>::InnerIterator it(mat,k); it; ++it)
{
index_mat++;
mat_map(index_mat,0) = it.row(); // row index
mat_map(index_mat,1) = it.col(); // col index
mat_map(index_mat,2) = it.value();
}
cout << mat_map << endl;
я получаю следующее
0 0 1.0
1 0 1.0
4 0 1.0
2 1 1.0
0 2 1.0
3 2 1.0
4 3 1.0
1 4 1.0
3 4 1.0
, в то время как я хочу
0 0 1.0
0 2 1.0
1 0 1.0
1 4 1.0
2 1 1.0
3 2 1.0
3 4 1.0
4 0 1.0
4 3 1.0
Любая помощь будет оценена
спасибо!