2

有没有办法使用特征来实现(伪代码):

A = BooleanExpr(X) ? ExprTrue : ExprFalse;

其中所有变量都是 Eigen::Array 的。也就是说,对于 X 的每个分量,如果该分量上的 BooleanExpr 为真,则 A 的对应分量计算为 ExprTrue,否则为 ExprFalse。

我现在像这样实现它:

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

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

事实上,我想把它推广到 X 的分段定义函数,所以我可以计算类似(伪代码)的东西:

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

即 X 的分量上的整数表达式的结果确定用于计算 A 的相应分量的表达式。

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

4

1 回答 1

2

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

对于更一般的情况,除了嵌套选择之外,我不知道实现此目的的好方法。

于 2012-01-16T13:35:31.557 回答