首页 > 解决方案 > 关于 Eigen::MatrixXd 逐列计算的问题

问题描述

有没有按如下方式应用列计算?(每列除以该列的最后一个条目)

Eigen::MatrixXd A(3,5), B(3,5); 

A << 1, 4, 9, 16, 25,
     2, 4, 6, 8, 10,
     1, 2, 3, 4, 5;

B = (A.col) / (A.bottomerows<1>).col;

和 B 将是:

B = 1, 2, 3, 4, 5,
    2, 2, 2, 2, 2,
    1, 1, 1, 1, 1;

标签: c++eigen

解决方案


您正在寻找的功能是.hnormalized().homogeneous()。两者都可以这样应用.colwise()

Eigen::MatrixXd B = A.colwise().hnormalized().colwise().homogeneous();

.replicate()你可以用这样的魔法来达到同样的效果:

Eigen::MatrixXd B = A.array() / A.row(2).replicate(A.rows(),1).array();

(如果A是 a ArrayXXd,而不是 a MatrixXd,则无需编写.array()


推荐阅读