C++:如何将 std::vector 转换为 Eigen::MatrixXd?

Poi*_*oia 4 c++ stdvector eigen

我有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);
    }
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

编辑:更好意味着更快;)

Avi*_*urg 7

罗杰的答案很好,除了如果你想利用矢量化,Eigen::Map不知道它是否对齐,因此没有矢量化。如果您想要这样做,您需要复制数据而不仅仅是映射到它。

Eigen::MatrixXd copiedMatrix = Eigen::Map<Eigen::MatrixXd>(&param[n], n, n);
Run Code Online (Sandbox Code Playgroud)