gpt4 book ai didi

c++ - Eigen 3/C++ : MatrixXd multiply one row with another

转载 作者:行者123 更新时间:2023-11-28 04:55:40 24 4
gpt4 key购买 nike

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

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

快速实现如下所示修改版本的方法是什么?

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

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

最佳答案

你的意思是如何对第一个和最后一个列 vector 进行系数赋值和乘法?有很多方法可以做到这一点,但最简单/最快的可能是

Eigen::MatrixXd M2 = M;

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

另一种方法可能是构造一个具有给定行数/列数的未初始化矩阵,然后像这样进行 block 分配

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

关于c++ - Eigen 3/C++ : MatrixXd multiply one row with another,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47178088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com