В Eigen C ++, как умножить каждую строку матрицы NxM на вектор скаляров Nx1? - PullRequest
1 голос
/ 18 апреля 2020

например, у меня есть:

Matrix<double,5,2,RowMajor> points;
Matrix<double,5,1> scalars;

То, что я хочу, эквивалентно:

for(int i=0;i<5;++i){
  points.row(i)*=scalars(i);
}

Есть ли oneliner, который может достичь этого?

Я уже пробовал по строкам и массиву, но не могу сделать это правильно.

Ответы [ 2 ]

3 голосов
/ 18 апреля 2020

Одна строка выглядит следующим образом:

points.array().colwise() *= scalars.array();

Поскольку операции Array всегда выполняются по компонентам.

Я думал, что .colwise().cwiseProduct(scalars) также должно работать, но, очевидно, это не так. «т.

1 голос
/ 18 апреля 2020

Вы хотите выполнить умножение по элементам на столбцы, такие операции поддерживаются Array.

Версия Oneliner:

std::for_each(points.colwise().begin(),points.colwise().end(),
   [&](auto&& col){ col.array() *= scalars.array().col(0); });

Версия Twoliners:

points.array().col(0) *= scalars.array().col(0);
points.array().col(1) *= scalars.array().col(0);

Живая демоверсия

...