Индекс максимального коэффициента (по столбцам) в собственных числах
В 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 ответ:
Я нашел сообщение на форумах пользователей Eigen от 2012 года, которое предполагает, что это невозможно, и что цикл по строкам/столбцам действительно лучший способ.
Более короткого пути пока нет. Что касается векторизации,vec.maxCoeff()
векторизуется (стандартное сокращение), но не версия, возвращающая индекс:vec.maxCoeff(int&)
. Это не невозможно, но я и не ожидал этого. значительный выигрыш, если таковой имеется.Я кратко просмотрел некоторые из 3.2.7 кодовой базы, и не похоже, что с тех пор все изменилось.