Установка отрицательных элементов 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, хотя.