2017-12-10 3 views
1

何よりも前に私はComparing two matrices with eigen を学んだと言わなければならないが、私の質問は同じではない。 AとBの2つの固有行列があり、次のようにAを編集したいとします。2行列を比較するには?

if(A(i、j)> B(i、j))A(i、j)= A (i、j)は そうでない場合には(I、J)= B(i、j)は私はループの明示せずにそれを行うことが可能となる推測

。しかし、私はまだEigenに堪能ではありません。何が最善のアプローチですか?

+0

である私が固有にないのですが、そのようなことを表現する一般的な方法は、A = A *(A> B)+ Bの*(の道に沿って行きますB> A)。 – ypnos

+0

'a =(a> b)ですか? a:b'は全く働く? –

+0

@AlanStokesあなた/ Eigenが三項演算子に過負荷をかけることができないので、それはうまくいくとは思わない。 – ypnos

答えて

3

これはA.cwiseMax(B)です。私のマシンで

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

int main() 
{ 
    Eigen::Matrix2i A = Eigen::Matrix2i::Random(); 
    Eigen::Matrix2i B = Eigen::Matrix2i::Random(); 

    std::cout << "A =\n" << A << "\nB =\n" << B << "\n"; 

    A = A.cwiseMax(B); 

    std::cout << "max(A,B) =\n" << A << "\n"; 
} 

出力が

A = 
730547559 607950953 
-226810938 640895091 
B = 
884005969 -353856438 
-649503489 576018668 
max(A,B) = 
884005969 607950953 
-226810938 640895091