使用Eigen3 / C ++库,给出MatrixXd
/ x0 ... y0 \
| x1 ... y1 |
M = | ... ... ... |
| |
\ xN ... yN /
如下所示,实现修改版本的禁食方法是什么?
/ x0 * y0 ... y0 \
| x1 * y1 ... y1 |
M' = | ... ... ... |
| |
\ xN * yN ... yN /
即,一列(具有x-s的列)被其自身替换 乘以另一列(与y-s一起)。
答案 0 :(得分:1)
你的意思是如何系数分配 - 乘以第一个和最后一个列向量?有很多方法可以做到,但最简单/最快的可能是
Eigen::MatrixXd M2 = M;
M2.leftCols<1>().array() *= M2.rightCols<1>().array();
替代方案可能是构造一个具有给定行数/列数的未初始化矩阵,然后像
一样进行块分配Eigen::MatrixXd M2{ M.rows(), M.cols() };
M2.rightCols( M.cols() - 1 ) = M.rightCols( M.cols() - 1 );
M2.leftCols<1>() = M.leftCols<1>().cwiseProduct( M.rightCols<1>() );
哪个更快我不知道(但你的首选探查者确实如此)。
以后的问题,这是官方Eigen quick reference;)