将两个特征矩阵直接乘以目标矩阵

时间:2018-02-06 13:54:55

标签: c++ c++11 memory-management eigen

我需要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)的内存中?

0 个答案:

没有答案