如何解决Eigen - 将向量重塑为矩阵
我正在尝试将向量重塑为矩阵,但出现以下错误
unsigned int Nx = 8;
unsigned int Ny = 7;
Eigen::VectorXi G_temp = Eigen::VectorXi::LinSpaced((Nx + 2) * (Ny + 2),(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>'
我遵循了 here 所写的内容,但我不明白我做错的方式。
解决方法
在 Eigen 中没有从整数值到双值表达式的隐式转换。要么使用 VectorXd
表示 G_temp
(和 LinSpaced
表达式):
Eigen::VectorXd G_temp = Eigen::VectorXd::LinSpaced((Nx + 2) * (Ny + 2),(Nx + 2) * (Ny + 2)-1);
或者在将结果分配给 MatrixXi
之前使用 .cast<double>()
-Map 和 G
结果。
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。