繁体   English   中英

在 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可以做到这一点?

我已经尝试过逐行和数组,但无法正确处理。

单线如下:

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

因为数组操作始终是组件式的。

我认为.colwise().cwiseProduct(scalars)也应该可以工作,但显然不行。

您想通过 cols 逐个元素地执行乘法运算,这种操作由Array支持。

单线版:

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

双线版本:

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

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM