なぜこれがEigenで機能しないのか疑問に思っていました:
MatrixXd A = MatrixXd::Random(3, 10);
Array<double, 1, Dynamic> x = Array<double, 1, Dynamic>::Random(10);
MatrixXd y = x.matrix() * A.transpose();
これが機能している間:
MatrixXd A = MatrixXd::Random(3, 10);
Array<double, 1, Dynamic> x = Array<double, 1, Dynamic>::Random(10);
MatrixXd y = MatrixXd(x) * A.transpose();
これも機能します:
MatrixXd A = MatrixXd::Random(3, 10);
ArrayXXd x = Array<double, 1, Dynamic>::Random(10);
MatrixXd y = x.matrix() * A.transpose();
私のコンパイラは、最初の例 (clang-500.2.79) に対して次のエラー メッセージを表示します。
code/Eigen/src/Core/ArrayWrapper.h:178:56: エラー:タイプ 'ScalarWithConstIfNotLvalue *' (別名 'double *') の戻りオブジェクトをタイプ 'const Scalar *' (別名 'const double *')インライン ScalarWithConstIfNotLvalue* data() { return m_expression.data(); }