C++ 如何使用迭代器和犰狳稀疏矩阵进行写访问?

C++ 如何使用迭代器和犰狳稀疏矩阵进行写访问?,c++,sparse-matrix,rcpp,armadillo,rcpparmadillo,C++,Sparse Matrix,Rcpp,Armadillo,Rcpparmadillo,我必须将稀疏矩阵中的一些列替换为另一个稀疏矩阵中的列,该稀疏矩阵具有相同的非零元素,只是根据条件具有不同的值 我正在用Armadillo中的迭代器进行写访问。文档说使用sp_mat::col_迭代器提供读/写访问,但是,当我尝试写一个值*it=B.col(…)时,我收到一条错误消息错误:与“operator=”不匹配(操作数类型是“arma::SpValProxy”。不过,我仍然想了解读/写访问和迭代器。查看(一般说来很好),我认为你遇到了一个设计问题 注意事项: 要以更安全的方式修改非零元素

我必须将稀疏矩阵中的一些列替换为另一个稀疏矩阵中的列,该稀疏矩阵具有相同的非零元素,只是根据条件具有不同的值

我正在用Armadillo中的迭代器进行写访问。文档说使用sp_mat::col_迭代器提供读/写访问,但是,当我尝试写一个值
*it=B.col(…)
时,我收到一条错误消息
错误:与“operator=”不匹配(操作数类型是“arma::SpValProxy”。不过,我仍然想了解读/写访问和迭代器。

查看(一般说来很好),我认为你遇到了一个设计问题

注意事项:

  • 要以更安全的方式修改非零元素,请使用.transform()或.for_each()而不是迭代器
  • 通过迭代器将零值写入稀疏矩阵将使与稀疏矩阵关联的所有当前迭代器无效 稀疏矩阵的行迭代器仅适用于Armadillo 8.500及更高版本;在早期版本中,它们效率低下

这就回答了我的问题,非常感谢!很高兴能提供帮助,并且迟到了欢迎来到StackOverflow。你可以通过点击勾号“接受”答案,只有提问者看到的你才可以,然后通过点击向上三角形“向上投票”。这两种方法都很常见,都是推荐的。
  arma::sp_mat A = arma::sprandu(100, 100, 0.01);
  arma::sp_mat B(A);
  B *= 2;
  arma::vec condition = arma::randi<arma::vec>(100, arma::distr_param(0, 1));
  
  arma::sp_mat::col_iterator it = A.begin();
  arma::sp_mat::col_iterator it_end = A.end();
  for(; it != it_end; ++it){
    if (condition(it.col())==1){
      *it = B.col(it.col());
    }
  }