在Eigen中找到rowwise maxCoeff和maxCoeff的索引

Flo*_*ald 7 eigen

我想找到矩阵行的最大值和索引.我基于特征网站上的一个例子(例子7).

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

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

    MatrixXf::Index   maxIndex;

    VectorXf maxVal = mat.rowwise().maxCoeff(&maxIndex);

    std::cout << "Maxima at positions " << endl;
    std::cout << maxIndex << std::endl;
    std::cout << "maxVal " << maxVal << endl;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是我的路线

    VectorXf maxVal = mat.rowwise().maxCoeff(&maxIndex);
Run Code Online (Sandbox Code Playgroud)

是错的.最初的例子有

    float maxNorm = mat.rowwise().sum().maxCoeff(&maxIndex);
Run Code Online (Sandbox Code Playgroud)

即涉及额外减少.sum().有什么建议?我想我只想要与我写的matlab中的内容等价

[maxval maxind] = max(mymatrix,[],2)
Run Code Online (Sandbox Code Playgroud)

即找到最大值及其在mymatrix第二维上的索引,并返回(nrow(mymatrix),2)矩阵.谢谢!

(也发送到特征列表,抱歉交叉发布.)

Jak*_*kob 9

我的猜测是,如果不使用当前的api使用for循环,这是不可能的.正如您自己所说,您可以使用获取最大行值的向量

VectorXf maxVal = mat.rowwise().maxCoeff();
Run Code Online (Sandbox Code Playgroud)

据我在API文档中可以看出maxCoeff(),它只会写回一个索引值.以下代码(未经测试)应该给你你想要的:

MatrixXf::Index   maxIndex[2];
VectorXf maxVal(2);
for(int i=0;i<2;++i)
    maxVal(i) = mat.row(i).maxCoeff( &maxIndex[i] );
Run Code Online (Sandbox Code Playgroud)