Индекс максимального коэффициента (по столбцам) в собственных числах


В Eigen я могу сделать по строкам или столбцам " частичное сокращение", чтобы получить максимальные коэффициенты.

Например, эта программа:

#include <iostream>
#include <Eigen/Dense>

int main()
{
  Eigen::MatrixXf mat(2,4);
  mat << 1, 2, 6, 9,
         3, 1, 7, 2;

  std::cout << "Column's maximum: " << std::endl
   << mat.colwise().maxCoeff() << std::endl;
}

Выходы:

Column's maximum:
3 2 7 9

Вместо того, чтобы создавать вектор строк с максимальным коэффициентом в каждом столбце, я хотел бы построить вектор строк с индексом максимального коэффициента каждого столбца.

Другими словами, Я хотел бы изменить программу таким образом, чтобы вывод стал:
Column's maximum:
1, 0, 1, 0

Я знаю, что могу. получить индекс по одному столбцу за раз, делая что-то вроде этого:

Eigen::MatrixXf::Index max_index;
mat.col(i).maxCoeff(&max_index);
Но я надеялся, что есть лучший способ, который мог бы сделать это все за один шаг вместо того, чтобы вручную перебирать каждую колонку. Возможно ли это? (Я использую Эйген В3.2.7)
1 2

1 ответ:

Я нашел сообщение на форумах пользователей Eigen от 2012 года, которое предполагает, что это невозможно, и что цикл по строкам/столбцам действительно лучший способ.

Более короткого пути пока нет. Что касается векторизации, vec.maxCoeff() векторизуется (стандартное сокращение), но не версия, возвращающая индекс: vec.maxCoeff(int&). Это не невозможно, но я и не ожидал этого. значительный выигрыш, если таковой имеется.

Я кратко просмотрел некоторые из 3.2.7 кодовой базы, и не похоже, что с тех пор все изменилось.