Установка отрицательных элементов Eigen SparseVector C++

Каков наиболее эффективный способ установить все отрицательные значения в Eigen SparseVector на ноль?

У меня есть SparseVector с ~1000000 элементами с очень небольшим количеством ненулевых записей. Мне нужно установить те, которые отрицательны к нулю. Итерации по всему вектору занимают слишком много времени. Есть ли более эффективный способ сделать это?

2 ответа

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

За SparseMatrix вы могли бы на самом деле использовать prune с пользовательским функтором (который должен возвращать true для значений, которые должны быть сохранены):

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

Не уверен, почему это не доступно для SparseVector, хотя.

Другие вопросы по тегам