我需要std::vector
中带有Eigen的矩阵乘法结果的原始值。
为避免在实际乘法后复制值,我希望Eigen直接写入目标向量所拥有的内存段。
使用Eigen::Map
我让矩阵从向量中借用内存。
以下是我当前代码的最小示例:
#include <eigen3/Eigen/Core>
using Mat = Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
using RowUnAligned = Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
int main()
{
Mat mat_a(456, 567);
Mat mat_b(567, 678);
// ...
std::vector<float> res_vec;
res_vec.resize(mat_a.rows() * mat_b.cols());
Eigen::Map<RowUnAligned, Eigen::Unaligned> mat_c(
res_vec.data(), mat_a.cols(), mat_b.rows());
mat_c = mat_a * mat_b;
}
问题是乘法运算符会创建一个临时矩阵,然后赋值运算符会将值复制到我的目标矩阵中,如果我理解的话。
那么我如何才能让Eigen不创建临时对象,而是将其结果直接写入向量(本例中为mat_c
)的内存中?