【问题标题】:Eigen Package Iterate over Row Major Sparse Matrix特征包迭代行主要稀疏矩阵
【发布时间】:2014-04-20 16:52:32
【问题描述】:

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

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 可使代码按预期工作。

我不确定行主要部分出了什么问题?有人可以让我知道我在这里缺少什么吗?

提前致谢

【问题讨论】:

    标签: matrix eigen sparse-matrix eigen3


    【解决方案1】:

    我很惊讶它编译得很好:你的迭代器类型不正确。它必须是SparseMatrix&lt;double,Eigen::RowMajor&gt;::InnerIterator

    【讨论】:

    • 啊!!我知道了。这就说得通了。让我向 Eigen 提交一个错误,因为我没有看到任何编译错误。不确定这是否是用户的责任,但最好让 Eigen 人知道。非常感谢您在这方面的帮助。
    • 显然这仍然发生在最后一个 Eigen 版本中。是否确实报告/考虑了该错误?问题出在用户代码上,但我猜对迭代器的构造函数进行检查会有所帮助。
    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2019-05-21
    • 2016-10-09
    • 2012-05-15
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多