1

C++ 線形代数ライブラリ eigen を使用しています。私は2つの行列を掛けようとしました:

static void do_stuff_with_matrix(Eigen::MatrixXf& mat) {
  return;
}

Eigen::MatrixXf a(3, 4);
Eigen::MatrixXf b(4, 5);

Eigen::MatrixXf c = a * b;
do_stuff_with_matrix(c);

残念ながら、ProductReturnType(これcは) を に変換できないというコンパイラ エラーが表示されますEigen::MatrixXf&。この変換を実行するにはどうすればよいですか?

4

1 に答える 1

2

Eigen は、不必要な一時的なものなどを防ぐために遅延評価を使用します。その結果c、本質的にはProductReturnType、マトリックス製品の最適化された構造になります。

template<typename Lhs, typename Rhs, int ProductType>
class Eigen::ProductReturnType< Lhs, Rhs, ProductType >

の正しい最適化された戻り型を取得するためのヘルパー クラスoperator*。[ 2も参照]

フォームの式から実数行列を作成するには、A * Bそれを直接評価する必要があります。

Eigen::MatrixXf c = (a * b).eval();
do_stuff_with_matrix(c);

Eigen の遅延評価とエイリアシングの詳細については、このページを参照してください。

于 2013-04-14T04:07:38.807 に答える