特征3/C++:矩阵Xd将一行与另一行相乘

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

本文关键字:一行 C++ Xd 特征 矩阵      更新时间:2023-10-16

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

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

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

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

也就是说,一列(带有 x-s 的列)被自身替换乘以另一列(带有 y-s 的列)。

你的意思是如何按系数分配-乘以第一个和最后一个列向量吗? 有很多方法可以做到这一点,但最简单/最快的可能是

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>() );

我不知道哪个更快(但你喜欢的分析器有)。

对于将来的问题,这里是官方的特征快速参考;)