特征中的分量条件/分段定义的运算

时间:2012-01-16 10:50:00

标签: c++ eigen

有没有办法实现使用像(伪代码)这样​​的特征:

A = BooleanExpr(X) ? ExprTrue : ExprFalse;

其中所有变量都是Eigen :: Array。这是针对X的每个组件,如果该组件上的BooleanExpr为true,则A的相应组件计算为ExprTrue,否则为ExprFalse。

我现在实施它,如:

COND = BooleanExpr(X).cast<double>();
A = COND * ExprTrue + (1-COND) * ExprFalse;

但是这会计算每个组件上的Expr *,当Expr价格昂贵时,感觉不对。

实际上我想将它概括为X的分段定义函数,所以我可以计算类似(伪代码)的东西:

A = PieceExpr[ IntExpr(X) ] ( B );

是X组件上的整数表达式的结果,用于计算用于计算A的相应组件的表达式。

可能我只是走错了方向,并且有一种方法可以在本征中获得相同的结果,我只是想不出来。

1 个答案:

答案 0 :(得分:2)

看起来你需要http://eigen.tuxfamily.org/dox-devel/classEigen_1_1DenseBase.html#a7c7f8804e216885f49b70f61c7ae3bbb中记录的.select()(我认为这适用于数组和矩阵,与文档建议的相反)。

对于更一般的情况,我不知道除嵌套选择之外的其他方法。