在 Eigen c++ 中,如何将 NxM 矩阵的每一行乘以 Nx1 标量的向量?

In Eigen c++, how to multiply each row of NxM matrix by a vector of Nx1 scalars?

例如,我有:

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

我想要的相当于:

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

有oneliner可以做到吗?

我已经试过 rowwise 和 array,但还是做不对。

您想通过 cols 按元素执行乘法,Array 支持此类操作。

单线版本:

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);

Live demo

一行如下:

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

因为数组操作总是基于组件的。

我认为 .colwise().cwiseProduct(scalars) 也应该有效,但显然无效。