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

component-wise conditional / piecewise-defined operations in eigen

本文关键字:分段 定义 运算 条件 分量 特征      更新时间:2023-10-16

有没有一种方法可以使用特征来实现(伪代码):

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的相应分量的表达式。

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

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

对于更普遍的情况,除了嵌套选择之外,我不知道还有什么好方法可以实现这一点。