我想找到矩阵行的最大值和索引.我基于特征网站上的一个例子(例子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)矩阵.谢谢!
(也发送到特征列表,抱歉交叉发布.)
我的猜测是,如果不使用当前的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)