c-本征:将每一行除以最后一行

使用Eigen的按行运算时,我不太清楚这个语法.

我有一个本征矩阵,我想将每一行除以最后一行.所以如果我们从矩阵开始

r = [ 0, 1
      2, 3 
      4, 5 ]

然后经过这种转换,我想

r = [  0, .2
      .5, .6
       1,  1 ]

优选地,该操作将发生在原处,覆盖r.此外,我不会使用最后一行中的值,因此,在转换后最后一行实际上是否为1并不重要.

这是我尝试过但无法编译的一些语法:

r.rowwise() = (r.array().rowwise() / r.bottomRows(1).array()).eval();
r.rowwise() = (r.rowwise().array() / r.bottomRows(1).array()).eval();
r.rowwise() /= r.bottomRows(1).array();
r = r.rowwise().cwiseQuotient(rrr);

这个普通的for循环版本适用

int last_row = r.rows() - 1;
for (int row = 0; row < last_row; ++row) {
    r.row(row).array() /= r.row(last_row).array();
}

但是,无论我走到哪里,人们都在倡导使用逐行或逐行操作.我无法使用此语法.我想使用行运算符来做一个很好的简洁形式吗?

最佳答案
要完成自我解答,如果不需要最后一行,可以使用hnormalized

result = r.colwise().hnormalized()

使用Eigen主干,您还可以编写:

using namespace Eigen::placeholders::last;
r.array().rowwise() /= r.row(last).array();

转载注明原文:c-本征:将每一行除以最后一行 - 代码日志