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

Eigen3/C++: MatrixXd multiply one row with another

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

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

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

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

即一列(带x-s的那一列)被自己替换 与另一列(与 y-s 相乘)相乘。

你的意思是如何对第一个和最后一个列向量进行系数赋值和乘法运算?有很多方法可以做到这一点,但 easiest/fastest 可能是

Eigen::MatrixXd M2 = M;

M2.leftCols<1>().array() *= M2.rightCols<1>().array();

另一种方法可能是构造一个具有给定数量 rows/cols 的未初始化矩阵,然后像

一样进行块分配
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 ;)