簡體   English   中英

C ++:如何將std :: vector轉換為Eigen :: MatrixXd?

[英]C++: how to convert std::vector to Eigen::MatrixXd?

我有長度(n + n * n)的std::vector<double> 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);
    }
}

有更好的方法嗎?

編輯:更好意味着更快;)

Roger的回答很好,但是如果您要利用向量化,則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);

通過這種方式,可以重用參數存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM