特征中最大系数的索引(列式)

时间:2015-12-31 20:13:20

标签: c++ eigen eigen3

在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)

1 个答案:

答案 0 :(得分:2)

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

  

还没有更短的路要走。关于矢量化,vec.maxCoeff()   是矢量化(标准缩减),但不是返回的版本   index:vec.maxCoeff(int&)。这并非不可能,但我不指望   如果有任何重大收益。

我简要介绍了3.2.7代码库中的一些内容,并且自发布以来没有任何变化。