有什么办法可以做到以下几点吗?
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());
答案 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(标题迭代非零系数)。