13

行列の行ごとに最大値とインデックスを見つけたい。これは、 eigen Web サイトの例 (例 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 の 2 番目の次元のインデックスであり、(nrow(mymatrix),2) マトリックスで返します。ありがとう!

(固有リストにも送信されます。クロスポストはご容赦ください。)

4

2 に答える 2

11

私の推測では、現在の API を使用して for ループを使用しないと、これは不可能です。あなた自身が言ったように、最大​​行値のベクトルを使用して取得できます

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

maxCoeff()の API ドキュメントからわかる限り、単一のインデックス値のみを書き戻します。次のコード(テストされていません)は、あなたが望むものを与えるはずです:

MatrixXf::Index   maxIndex[2];
VectorXf maxVal(2);
for(int i=0;i<2;++i)
    maxVal(i) = mat.row(i).maxCoeff( &maxIndex[i] );
于 2012-07-18T09:25:07.817 に答える