在 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);
一行如下:
points.array().colwise() *= scalars.array();
因为数组操作总是基于组件的。
我认为 .colwise().cwiseProduct(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);
一行如下:
points.array().colwise() *= scalars.array();
因为数组操作总是基于组件的。
我认为 .colwise().cwiseProduct(scalars)
也应该有效,但显然无效。