本征动态大小矩阵 verticaly/horizontaly Linspaced?

Eigen Dynamic-sized matrix verticaly/horizontaly Linspaced?

我目前正在做一个项目,我需要能够创建矩阵,例如:

MatrixXi lin_spaced_horizontaly = 

0 1 2 3 4 ... ncols
0 1 2 3 4 ... ncols
0 1 2 3 4 ... ncols

MatrixXi lin_spaced_verticaly =
0 0 0 
1 1 1 
2 2 2 
3 3 3 
4 4 4
 . . . 
nrows nrows nrows

目前我正在尝试这样的事情:

Eigen::VectorXi v_lin_vec = Eigen::VectorXi::LinSpaced(nrows_, 0, nrows_).transpose
Eigen::MatrixXi v_lin_matrix (nrows_, ncols_);
for (auto i = 0; i<ncols_; i++)
        v_lin_matrix << v_lin_vec;

Eigen::VectorXi h_lin_vec = Eigen::VectorXi::LinSpaced(ncols_, 0, ncols_)
Eigen::MatrixXi h_lin_matrix (nrows_, ncols_);
for (auto i = 0; i<ncols_; i++)
        h_lin_matrix << h_lin_vec;

我得到的结果如下:

v_lin_matrix 
-------------
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0

h_lin_matrix
-------------
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0

提前致谢!

您可以像这样使用 .rowwise().replicate(ncols_).colwise().replicate(nrows_)

Eigen::MatrixXi v_lin_matrix = Eigen::VectorXi::LinSpaced(nrows_, 0, nrows_)
                                     .rowwise().replicate(ncols_);
Eigen::MatrixXi h_lin_matrix = Eigen::RowVectorXi::LinSpaced(ncols_, 0, ncols_)
                                     .colwise().replicate(nrows_);

或者:

Eigen::MatrixXi v_lin_matrix = Eigen::VectorXi::LinSpaced(nrows_, 0, nrows_)
                                     .replicate(1,ncols_);
Eigen::MatrixXi h_lin_matrix = Eigen::RowVectorXi::LinSpaced(ncols_, 0, ncols_)
                                     .replicate(nrows_,1);

关于 << 的使用:这意味着与 , 运算符结合使用以在单个表达式中初始化矩阵,如下所示:

 Eigen::MatrixXi A(4,ncols_);
 A << row0, row1, row2, row3;

您编写的内容将在运行时断言(如果您编译时没有 -DNDEBUG,我强烈建议您这样做,直到您的代码经过充分测试!)