C :如何将std ::向量转换为eigen :: matrixxd

C++: how to convert std::vector to Eigen::MatrixXd?

本文关键字:转换 matrixxd 向量 eigen std      更新时间:2023-10-16

我的 std::vector<double> param具有(n n * n)长度,我需要将最后一个(n * n)元素移至matrixxd。我这样做了:

MatrixXd cov(n, n);
for(int i = 0 ; i < n ; ++i) {
    for(int c = 0 ; c < n ; ++c) {
        cov(i, c) = param(n + i * n + c);
    }
}

有更好的方法吗?

编辑:更好地表示更快;)

罗杰的答案很好,除了您要使用矢量化,Eigen::Map不知道它是否对齐,因此没有矢量化。如果需要

Eigen::MatrixXd copiedMatrix = Eigen::Map<Eigen::MatrixXd>(&param[n], n, n);

如果向量保证矢量连续存储其元素,则最简单,最快的方法是:

std::vector<double> param;
//code//
.
.
.
//code//
double *v = &param[n];
Eigen::Map<Eigen::MatrixXd> matrix(v,n + n * n,1);

以这种方式,请重复使用参数的内存。