我不太清楚在使用Eigen的rowwise操作时的语法.
我有一个特征矩阵,我想把每一行除以最后一行。所以如果我们从矩阵开始
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);这个简单的老版本可以工作。
int last_row = r.rows() - 1;
for (int row = 0; row < last_row; ++row) {
r.row(row).array() /= r.row(last_row).array();
}然而,无论我转到哪里,人们都在提倡使用rowwise或colwise操作。我不能让它和那个语法一起工作。是否有一个很好的简洁的形式,我想做什么使用rowwise运算符?
发布于 2018-02-22 17:45:57
要完成自应答,如果不需要最后一行,可以使用氢正化
result = r.colwise().hnormalized()使用本征干线,您还可以编写:
using namespace Eigen::placeholders::last;
r.array().rowwise() /= r.row(last).array();发布于 2018-02-22 15:30:39
当然,我在发帖后终于找到了正确的语法.
int last_row = r.rows() - 1;
r.array().rowwise() /= r.row(last_row).array();由于某些原因,在这里使用bottomRows会导致编译错误。也就是说,以下内容不编译
r.array().rowwise() /= r.bottomRows(1).array();https://stackoverflow.com/questions/48930949
复制相似问题