Вопрос по Eigen :: MatrixXd по столбцам вычисления - PullRequest
1 голос
/ 19 апреля 2019

Есть ли какой-либо способ применения вычисления по столбцам следующим образом?(каждый столбец, разделенный на последнюю запись столбца)

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;

1 Ответ

2 голосов
/ 19 апреля 2019

Вы ищете следующие функции: .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())

...