2

(疑似コード)のような固有値を使用して実装する方法はありますか:

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 の対応する成分を計算するために使用される式を決定します。

私はそれについて間違った方向に進んでいるだけで、すでに固有値で同じ結果を達成する方法があるかもしれませんが、私はそれを理解できません。

4

1 に答える 1

2

http://eigen.tuxfamily.org/dox-devel/classEigen_1_1DenseBase.html#a7c7f8804e216885f49b70f61c7ae3bbbに記載されているように、.select() が必要なようです (これは、ドキュメントが示唆するものとは反対に、配列と行列で機能すると思います)。

より一般的な状況では、ネストされた選択以外にこれを達成する良い方法がわかりません。

于 2012-01-16T13:35:31.557 に答える