Eigen:如何更新SparseMatrix的值?

时间:2018-03-09 21:01:21

标签: eigen eigen3

有什么办法可以做到以下几点吗?

for(int i = 0; i < M.cols(); i++){
    for(InnerIterator it(M,i); it; ++it){
        it.value() = 1;
    }
}

现在,如果我从稀疏矩阵M开始,我使用三元组init创建M'

for(int i = 0; i < M.cols(); i++){
    for(InnerIterator it(M,i); it; ++it{
        triplet_vec.emplace_back(it.row(),it.col(),3.);
    }
}
// and init the new sparsemat
Mnew.setFromTriplets(triplet_vec.begin(),triplet_vec.end());

1 个答案:

答案 0 :(得分:1)

如果你正在寻找一个将现有矩阵中的所有非零值更改为常量(正如我从你的问题中所理解的那样),那么你总是可以迭代遍历非零值:

for (int k=0; k<mat.outerSize(); ++k)
    for (SparseMatrix<double>::InnerIterator it(mat,k); it; ++it)
        it.valueRef() = my_constant_value;

这不会导致对每组索引进行二进制搜索。有关更多详细信息,请参阅this page(标题迭代非零系数)。