gpt4 book ai didi

c++ - 将矩阵的行乘以 vector (低级优化)?

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:06 25 4
gpt4 key购买 nike

我正在优化一个函数,我想摆脱缓慢的 for 循环。我正在寻找一种更快的方法来将矩阵的每一行乘以一个 vector 。

我不是在寻找“经典”乘法。

例如。我有一个有 1024 列和 20 行的矩阵和一个长度为 1024 的 vector 。结果,我想要一个 1024 x 20 的矩阵,每一行都乘以 vector 。

我现在正在做的是在 for 循环中遍历矩阵行并使用 mkl v?Mul执行当前矩阵行和 vector 的逐元素乘法。有什么改进方法吗?

问题是复制Multiply rows of matrix by vector?但对于具有可能的低级优化和 MKL 的 C++,不适用于 R

最佳答案

使用 Eigen matrix library ,你所做的实际上是乘以对角矩阵。如果您有一个包含任意多行和 20 列的矩阵,您可以编写以下内容(不值得为此创建一个函数):

void multRows(Eigen::Matrix<double, Eigen::Dynamic, 20>& mat,
const Eigen::Matrix<double,20,1>& vect)
{
mat = mat * vect.asDiagonal();
}

如果编译器启用,Eigen 会生成 AVX2 代码。您可能想要试验在您的用例中存储 mat 行优先或列优先是否更有效。

附录(由于编辑过的问题):如果你有(很多)超过 20 列,你应该一起使用动态大小的矩阵:

void multRows(Eigen::MatrixXd& mat, const Eigen::VectorXd& vect)
{
mat = mat * vect.asDiagonal();
}

关于c++ - 将矩阵的行乘以 vector (低级优化)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381700/

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