如何将ProductReturnType转换为矩阵?

时间:2013-04-14 02:14:27

标签: c++ eigen

我正在使用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);

不幸的是,我收到编译器错误,指出ProductReturnTypec}无法转换为Eigen::MatrixXf&。如何执行此转换?

1 个答案:

答案 0 :(得分:2)

Eigen使用懒惰评估以防止不必要的临时和其他事情。因此,c基本上是ProductReturnType,是矩阵产品的优化结构:

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

Helper类,用于获取正确且优化的返回类型operator*。 [另见2]

为了从A * B形式的表达式创建一个真实矩阵,您需要直接评估它:

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

有关Eigen延迟评估和别名的更多信息,请参阅this page