2016-07-20 7 views
2

Eigenの2つのベクトル/行列の要素的な最大値を取りたいと思います。これまでのところ、私はこのコードを書いています:Eigenの要素的な最大と正の部分

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

これは正しいですか、これはこれを行う良い方法ですか?

正の部分(つまり、max(A, 0))については、どのように進むべきかわかりません。 2つの方法を作成する必要がありますか?

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); 
} 

理想的には両方ともpositive_partと呼ばれます。

答えて

6

答えはthereです。

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

またはcwiseMaxを使用します:

あなたが"array" worldと使用最大に移動することができますいずれか

:どちらの場合も

A.cwiseMax(B) 

を、BMatrixまたはスカラーのいずれかになります

A = A.cwiseMax(0); 
関連する問題