特征索引,更新特定行的所有列

Gae*_*tan 1 c++ eigen

假设我有一个ArrayXXf(或MatrixXf) m。在 for 循环的每次迭代中,我想mVectorXf.

Eigen::ArrayXXf m(5, 5);

for (int i = 0; i < 5; i++)
{
    Eigen::VectorXf vec(5);
    vec << i, i + 1, i + 2, i+3, i+4;

    //fill m row wise
    // in matlab I will do something like m(i,:) = vec; 
    // in numpy this will looks like m[i:] = vec;
    // that means when i is 0 m looks like 
    //          [ 0 1 2 3 4 5
    //           -  - - - - -
    //           -  - - - - -
    //           -  - - - - -
    //           -  - - - - -]
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Eigen 中实现这一目标?

cht*_*htz 5

为了简化@Kunal的答案,您可以直接修改数组(或矩阵)的行(或列),而无需创建临时向量。在您的示例中,您可以使用.setLinSpaced()

Eigen::ArrayXXf m(5, 5);

for (int i = 0; i < 5; i++) {
    m.row(i).setLinSpaced(i,i+4); //.col(i) would be slightly more efficient
}
Run Code Online (Sandbox Code Playgroud)

或使用逗号初始值设定项:

for (int i = 0; i < 5; i++) {
    m.row(i) << i, i+1, i+2, i+3, i+4;
}
Run Code Online (Sandbox Code Playgroud)