关于 Eigen::MatrixXd 列计算的问题
Question about Eigen::MatrixXd column-wise calculation
有没有按如下方式应用列式计算?
(每列除以该列的最后一个条目)
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();
(如果 A
是 ArrayXXd
,而不是 MatrixXd
,则不需要写 .array()
)
有没有按如下方式应用列式计算? (每列除以该列的最后一个条目)
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();
(如果 A
是 ArrayXXd
,而不是 MatrixXd
,则不需要写 .array()
)