c++ - Eigen - 将 vector reshape 为矩阵

标签 c++ reshape eigen

我正在尝试将 vector reshape 为矩阵,但出现以下错误

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>'

我按照写的here进行操作,但我不明白我做错的方式。

最佳答案

Eigen 中没有从整数值表达式到双值表达式的隐式转换。要么只使用 VectorXd对于 G_temp (和 LinSpaced 表达式):

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

或者使用 MatrixXi - map 和.cast<double>()将其分配给 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);

关于c++ - Eigen - 将 vector reshape 为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66281544/

相关文章:

c++ - Lua语法错误的描述性错误消息

c++ - 将 std::shared_ptr 与 clang++ 和 libstdc++ 一起使用

c++ - 在 WM_PAINT 之后调整窗口大小以适合内容

machine-learning - 最大池化后 reshape 张量 ValueError : Shapes are not compatible

c++ - 关于 Eigen C++ 库的 EulerAngles 转换

c++11 - 如何使用 Eigen 的逐元素整数幂

c++ - 如何在 C++17 中使用 <execution> 库

python - Pandas groupby - 对用户进行分组并计算订阅类型

r - 如何使用函数 `gather`(或类似函数)重组数据以将四个变量减少为两个

c++:特征库新手排序