2016-07-20 6 views
2

Ich möchte das elementweise Maximum von zwei Vektoren/Matrizen in Eigen nehmen. Bis jetzt habe ich diesen Code geschrieben:Elementweise Max und positiver Teil in Eigen

template <typename S, typename T> 
auto elemwise_max(const S & A, const T & B) { 
    return (A.array() > B.array()).select(A, B); 
} 

Ist das korrekt, oder gibt es eine bessere Möglichkeit, dies zu tun?

Für den positiven Teil (dh. max(A, 0)), bin ich mir nicht sicher, wie es weiter geht. Muss ich zwei Methoden erstellen?

template <typename S> 
auto positive_part_matrix(const S & A) { 
    auto zeros = S::Zero(A.rows(), A.cols()); 
    return elemwise_max(A, zeros); 
} 

template <typename S> 
auto positive_part_vec(const S & A) { 
    auto zeros = S::Zero(A.size()); 
    return elemwise_max(A, zeros); 
} 

Idealerweise würden beide der oben genannten nur positive_part genannt werden.

Antwort

6

Die Antwort ist there.

Sie können entweder bewegen zum "array" world und Nutzung max:

A.array().max(B.array()) 

oder verwenden cwiseMax:

A.cwiseMax(B) 

In beiden Fällen kann B entweder ein Matrix oder ein Skalar:

A = A.cwiseMax(0);