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

C++ C++;:如何将std::vector转换为Eigen::MatrixXd?,c++,eigen,stdvector,C++,Eigen,Stdvector,我有一个长度为(n+n*n)的std::vector param,我需要将最后一个(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); } } MatrixXd-cov(n,n); 对于(int i=0;i

我有一个长度为(n+n*n)的
std::vector param
,我需要将最后一个(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);
    }
}
MatrixXd-cov(n,n);
对于(int i=0;i
有没有更好的办法


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

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

std::vector<double> param;
//code//
.
.
.
//code//
double *v = &param[n];
Eigen::Map<Eigen::MatrixXd> matrix(v,n + n * n,1);
std::vector参数;
//代码//
.
.
.
//代码//
双*v=¶m[n];
本征::映射矩阵(v,n+n*n,1);
这样就可以重用param的内存。

很好,但如果要利用矢量化,
Eigen::Map
不知道它是否对齐,因此没有矢量化。如果需要,您需要对数据进行复制,而不仅仅是映射到它

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

std::vectors始终将其元素连续存储在内存库中!它正在工作,但实际上应该有:
double*v=¶m(n);本征::映射矩阵(v,n,n)仅…[n]。。在Mac上工作。我不知道为什么。双*v=¶m[n];本征::映射矩阵(v,n,n);