我想找到矩阵行的最大值和索引。我的基础是eigen website 上的一个例子(例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;
}
问题在于我的行
VectorXf maxVal = mat.rowwise().maxCoeff(&maxIndex);
错了。原始示例有
float maxNorm = mat.rowwise().sum().maxCoeff(&maxIndex);
即。还有一个减少.sum()的减少。有什么建议?我想我只想要与matlab中的内容相同的特征
[maxval maxind] = max(mymatrix,[],2)
即。找到最大值,它是mymatrix第二维的索引,并以(nrow(mymatrix),2)矩阵返回。 谢谢!
(也发送到特征列表,抱歉交叉发布。)
答案 0 :(得分:9)
我的猜测是,如果不使用当前的api使用for循环,这是不可能的。正如您自己所说,您可以使用
获取最大行值的向量VectorXf maxVal = mat.rowwise().maxCoeff();
据我在API文档中可以看出maxCoeff(),它只会回写一个索引值。以下代码(未经测试)应该为您提供所需内容:
MatrixXf::Index maxIndex[2];
VectorXf maxVal(2);
for(int i=0;i<2;++i)
maxVal(i) = mat.row(i).maxCoeff( &maxIndex[i] );
答案 1 :(得分:2)
除了“for循环”solution by Jakob之外,您还可以使用libigl的count
,其函数类似于MATLAB的行/列最大值
igl::mat_max
然后Eigen::MatrixXf mat(2,4);
mat << 1, 2, 6, 9,
3, 1, 7, 2;
Eigen::VectorXi maxIndices;
Eigen::VectorXf maxVals;
igl::mat_max(mat,2,maxVals,maxIndices);
将包含maxVals
,[9;7]
将包含maxIndices
。