Eigen3 / C ++:MatrixXd将一行与另一行相乘

时间:2017-11-08 11:05:30

标签: c++ matrix linear-algebra eigen3

使用Eigen3 / C ++库,给出MatrixXd

    / x0   ...  y0  \
    | x1   ...  y1  |
M = | ...  ...  ... |
    |               |
    \ xN   ...  yN  /

如下所示,实现修改版本的禁食方法是什么?

     / x0 * y0   ...  y0  \
     | x1 * y1   ...  y1  |
M' = | ...  ...  ...      |
     |                    |
     \ xN * yN   ...  yN  /

即,一列(具有x-s的列)被其自身替换 乘以另一列(与y-s一起)。

1 个答案:

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