本征:将每一行除以最后一行
Eigen: Divide each row by last row
在使用 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);
这个普通的旧 for 循环版本有效
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
运算符执行的操作是否有简洁明了的形式?
当然,我发帖后终于找到了正确的语法...
int last_row = r.rows() - 1;
r.array().rowwise() /= r.row(last_row).array();
由于某些原因,这里使用bottomRows
会导致编译错误。即以下不编译
r.array().rowwise() /= r.bottomRows(1).array();
要完成 self-answer,如果您不需要最后一行,可以使用 hnormalized:
result = r.colwise().hnormalized()
并且使用 Eigen 主干你还可以写:
using namespace Eigen::placeholders::last;
r.array().rowwise() /= r.row(last).array();
在使用 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);
这个普通的旧 for 循环版本有效
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
运算符执行的操作是否有简洁明了的形式?
当然,我发帖后终于找到了正确的语法...
int last_row = r.rows() - 1;
r.array().rowwise() /= r.row(last_row).array();
由于某些原因,这里使用bottomRows
会导致编译错误。即以下不编译
r.array().rowwise() /= r.bottomRows(1).array();
要完成 self-answer,如果您不需要最后一行,可以使用 hnormalized:
result = r.colwise().hnormalized()
并且使用 Eigen 主干你还可以写:
using namespace Eigen::placeholders::last;
r.array().rowwise() /= r.row(last).array();