使用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>() );
我不知道哪个更快(但你喜欢的分析器有)。
对于将来的问题,这里是官方的特征快速参考;)