簡體   English   中英

Eigen - 將向量重塑為矩陣

[英]Eigen - reshape a vector to matrix

我正在嘗試將向量重塑為矩陣,但出現以下錯誤

unsigned int Nx     = 8;
unsigned int Ny     = 7;
Eigen::VectorXi G_temp = Eigen::VectorXi::LinSpaced((Nx + 2) * (Ny + 2),0,(Nx + 2) * (Ny + 2)-1);
Eigen::MatrixXd G = Eigen::Map<Eigen::MatrixXd>(G_temp.data(),Nx+2, Ny+2); // error: no matching constructor for initialization of 'Eigen::Map<Eigen::MatrixXd>'

我遵循了這里寫的內容,但我不明白我做錯的方式。

在 Eigen 中沒有從整數值到雙值表達式的隱式轉換。 要么只將VectorXd用於G_temp (和LinSpaced表達式):

Eigen::VectorXd G_temp = Eigen::VectorXd::LinSpaced((Nx + 2) * (Ny + 2),0,(Nx + 2) * (Ny + 2)-1);

或者在將結果分配給G之前使用MatrixXi -Map 和 .cast .cast<double>()結果。

Eigen::MatrixXd G = Eigen::Map<Eigen::MatrixXi>(G_temp.data(),Nx+2, Ny+2).cast<double>();

為避免任何臨時性,您還可以分配一個MatrixXd並直接在其中分配適當的值:

Eigen::MatrixXd G(Nx+2, Ny+2); // allocate matrix
// set values in-place:
Eigen::VectorXd::Map(G.data(), (Nx + 2) * (Ny + 2)).setLinSpaced(0,(Nx + 2) * (Ny + 2)-1);

或者使用 master/3.4 分支:

G.reshaped().setLinSpaced(0,(Nx + 2) * (Ny + 2)-1);

暫無
暫無

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

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