Я хочу получить индексы строк / столбцов из плотной матрицы, которые удовлетворяют условию.В моем случае результат, скорее всего, будет очень скудным.Например, с матрицей
1 5 2
7 6 3
2 3 8
я бы хотел получить указание, где коэффициент больше 4, или
(0,1), (1,0), (1,1), (2,2)
Мои первоначальные мысли включают использование select или по коэффициенту операций для построения матрицы bool / int
0 1 0
1 1 0
0 0 1
, а затем преобразование ее в разреженную матрицу
(0,1,1), (1,0,1), (1,1,1), (2,2,1)
и удаление значений коэффициентов
(0,1), (1,0), (1,1), (2,2)
Однако для этого требуется два прохода по матрицам, размер которых может быть очень большим.
Альтернативно простой двойной цикл по исходной матрице, похожий на псевдокод
for (int i; i < mat.cols(); i++) {
for (int j; j < mat.rows(); j++) {
if(cond(mat(j, i))) {
add_index(i, j, index_list)
}
}
}
, но это требует только оптимизации компиляторов и ни одной оптимизации / векторизации Eigen.
Есть ли более эффективный способ, которого мне не хватает?В моем случае это простые сравнения.
Спасибо за любую помощь