首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >艾根:每一行除以最后一行。

艾根:每一行除以最后一行。
EN

Stack Overflow用户
提问于 2018-02-22 15:18:31
回答 2查看 2.4K关注 0票数 4

我不太清楚在使用Eigen的rowwise操作时的语法.

我有一个特征矩阵,我想把每一行除以最后一行。所以如果我们从矩阵开始

代码语言:javascript
运行
复制
r = [ 0, 1
      2, 3 
      4, 5 ]

在这个转变之后,我想

代码语言:javascript
运行
复制
r = [  0, .2
      .5, .6
       1,  1 ]

最好是操作到位,覆盖r。此外,我不会在最后一行中使用值,所以最后一行实际上是转换后的1并不重要。

以下是我尝试过的一些不编译的语法:

代码语言:javascript
运行
复制
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);

这个简单的老版本可以工作。

代码语言:javascript
运行
复制
int last_row = r.rows() - 1;
for (int row = 0; row < last_row; ++row) {
    r.row(row).array() /= r.row(last_row).array();
}

然而,无论我转到哪里,人们都在提倡使用rowwisecolwise操作。我不能让它和那个语法一起工作。是否有一个很好的简洁的形式,我想做什么使用rowwise运算符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-22 17:45:57

要完成自应答,如果不需要最后一行,可以使用氢正化

代码语言:javascript
运行
复制
result = r.colwise().hnormalized()

使用本征干线,您还可以编写:

代码语言:javascript
运行
复制
using namespace Eigen::placeholders::last;
r.array().rowwise() /= r.row(last).array();
票数 4
EN

Stack Overflow用户

发布于 2018-02-22 15:30:39

当然,我在发帖后终于找到了正确的语法.

代码语言:javascript
运行
复制
int last_row = r.rows() - 1;
r.array().rowwise() /= r.row(last_row).array();

由于某些原因,在这里使用bottomRows会导致编译错误。也就是说,以下内容不编译

代码语言:javascript
运行
复制
r.array().rowwise() /= r.bottomRows(1).array();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48930949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档