关于 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;

您正在寻找的函数是 .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();

(如果AArrayXXd,而不是MatrixXd,就不需要写.array()了(

最新更新