设置负元素Eigen SparseVector C ++

时间:2018-08-15 18:30:21

标签: c++ eigen eigen3

将特征稀疏向量中的所有负值设置为零的最有效方法是什么?

我有一个SparseVector,带有〜1000000个元素,带有很少的非零条目。我需要将负数设置为零。遍历整个向量需要太多时间。有更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

for (Eigen::SparseVector<double, Eigen::RowMajor>::InnerIterator it(fullScan); it; ++it) {
    if (it.value() < 0) {
        fullScan.coeffRef(it.index()) = 0;
    }
}

答案 1 :(得分:0)

对于SparseMatrix,您实际上可以将prune与自定义函子一起使用(对于必须保留的值,该函子必须返回true):

mat.prune([](int, int, const double& val) { return val >= 0.0; });

不确定为什么SparseVector无法使用此功能。