Eigen中的元素最大值和正值部分

时间:2016-07-20 16:19:16

标签: c++ eigen

我想在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)),我不确定如何继续。我需要创建两种方法吗?

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

3 个答案:

答案 0 :(得分:8)

答案是there

您可以移至"array" world并使用max:

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

或使用cwiseMax:

A.cwiseMax(B)

在这两种情况下,B可以是Matrix或标量:

A = A.cwiseMax(0);

答案 1 :(得分:3)

答案 2 :(得分:0)

如果要对向量和标量/向量进行混合/最大值比较,则本征为:

  • 对于Max:
vector.cwiseMax(some_scalar); 
vector.cwiseMax(some_vector); 

  • 对于Min:
vector.cwiseMin(some_scalar); 
vector.cwiseMin(some_vector);
  • 同时针对两者,例如饱和度功能:
vector.cwiseMin(max_limit).cwiseMax(min_limit); 

但是,如果要使用矩阵进行比较,我认为您需要对每个行/列分别执行上述操作。