2017-12-10 9 views
1

Vor allem anderen muss ich sagen, dass ich Comparing two matrices with eigen studiert habe, aber meine Frage ist nicht die gleiche. Angenommen, ich habe zwei Eigen Matrizen A und B, und ich möchte A bearbeiten in folgenden Weise:Wie zwei Matrizen zu vergleichen?

wenn (A (i, j)> B (i, j)) A (i, j) = A (i, j) sonst A (i, j) = B (i, j)

ich denke, es möglich ist, sie ohne eine explizite for-Schleife zu tun. Aber ich bin noch nicht sehr gut mit Eigen. Was wäre der beste Ansatz?

+0

Ich bin nicht in Eigen aber allgemein so etwas auf dem Weg von A geht = A auszudrücken * (A> B) + B * (B> A). – ypnos

+0

Ist 'a = (a> b)? a: b' Arbeit überhaupt? –

+0

@AlanStokes Ich glaube nicht, dass das funktionieren würde, da du/tern den ternären Operator nicht überladen kannst. – ypnos

Antwort

3

Es ist 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"; 
} 

Ausgang auf meinem Rechner ist

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