Eigen软件包:按行迭代稀疏矩阵

6

我试图迭代行主稀疏矩阵的非零元素,如下所示:

Eigen::SparseMatrix<double,Eigen::RowMajor> Test(2, 3);
Test.insert(0, 1) = 34;
Test.insert(1, 2) = 56;
for (int k = 0; k < Test.outerSize(); ++k){
    for (Eigen::SparseMatrix<double>::InnerIterator it(Test, k); it; ++it){
        cout << it.row() <<"\t";
        cout << it.col() << "\t";
        cout << it.value() << endl;
    }
}

但我没有看到正确的值。 相反,我看到它的行(it.row())产生随机值,它的列(it.col())的值为1,it.value()的值也是随机的,如下所示:

-17891602       1       -2.65698e+303

将RowMajor更改为ColumnMajor可以使代码按预期工作。
我不确定行主要部分出了什么问题?有人能告诉我我错过了什么吗?
提前感谢。
1个回答

7

我很惊讶它可以编译通过:您的迭代器类型不正确。它必须是SparseMatrix<double,Eigen::RowMajor>::InnerIterator


1
啊!!我明白了。这很有道理。让我向Eigen提交一个错误报告,因为我没有看到任何编译错误。不确定这是否是用户的责任,但让Eigen的人知道这一点会很好。非常感谢您的帮助。 - akd
1
显然,这在最新的Eigen版本中仍然会发生。这个bug是否已经被报告/考虑过了?问题出现在用户代码中,但我想在迭代器的构造函数中进行检查可能会有所帮助。 - BenC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接