Eigen 中最大系数的索引(按列)

Index of max coefficient (column wise) in Eigen

在 Eigen 中,我可以按行或按列执行“partial reduction”以获得最大系数。

例如这个程序:

#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);

但我希望有一种更好的方法可以一步完成所有这些,而不是手动遍历每一列。这可能吗? (我使用的是 Eigen v3.2.7)

我在 2012 年的 Eigen 用户论坛上发现了一个 post 提示这是不可能的,并且循环 rows/columns 确实是最好的方法。

There is no shorter way yet. Regarding vectorization, vec.maxCoeff() is vectorized (standard reduction), but not the version returning the index: vec.maxCoeff(int&). It's not impossible but I'd not expect significant gain if any.

我简单地浏览了一些 3.2.7 代码库,自 post 以来似乎没有任何变化。