作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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&
。我如何执行此转换?
最佳答案
Eigen 使用惰性求值来防止不必要的临时值和其他东西。结果 c
本质上是一个 ProductReturnType
, 矩阵乘积的优化结构:
template<typename Lhs, typename Rhs, int ProductType>
class Eigen::ProductReturnType< Lhs, Rhs, ProductType >Helper class to get the correct and optimized returned type of
operator*
. [see also 2]
为了从 A * B
形式的表达式创建一个真正的矩阵,你需要直接计算它:
Eigen::MatrixXf c = (a * b).eval();
do_stuff_with_matrix(c);
参见 this page有关 Eigen 的惰性求值和别名的更多信息。
关于c++ - 如何将 ProductReturnType 转换为矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995028/
我是一名优秀的程序员,十分优秀!