有没有办法实现使用像(伪代码)这样的特征:
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的相应组件的表达式。
可能我只是走错了方向,并且有一种方法可以在本征中获得相同的结果,我只是想不出来。
答案 0 :(得分:2)
看起来你需要http://eigen.tuxfamily.org/dox-devel/classEigen_1_1DenseBase.html#a7c7f8804e216885f49b70f61c7ae3bbb中记录的.select()(我认为这适用于数组和矩阵,与文档建议的相反)。
对于更一般的情况,我不知道除嵌套选择之外的其他方法。