1

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

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

提前致谢 !

4

1 回答 1

1

你可以这样使用 .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,我强烈建议您在代码经过充分测试之前这样做!)

于 2020-06-11T08:22:51.013 回答