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 回答