[英]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>(¶m[n], n, n);
如果保證向量連續存儲其元素,則最簡單,最快的方法如下:
std::vector<double> param;
//code//
.
.
.
//code//
double *v = ¶m[n];
Eigen::Map<Eigen::MatrixXd> matrix(v,n + n * n,1);
通過這種方式,可以重用參數存儲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.