我正在使用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&
。如何执行此转换?
答案 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。