c++ - 如何优化矩阵乘法运算

标签 c++ matrix matrix-multiplication

<分区>

我需要在我的应用程序中执行大量矩阵运算。最耗时的是矩阵乘法。我是这样实现的

template<typename T>
Matrix<T> Matrix<T>::operator * (Matrix& matrix)
{


    Matrix<T> multipliedMatrix = Matrix<T>(this->rows,matrix.GetColumns(),0);

    for (int i=0;i<this->rows;i++)
    {
        for (int j=0;j<matrix.GetColumns();j++)
        {
            multipliedMatrix.datavector.at(i).at(j) = 0;
            for (int k=0;k<this->columns ;k++)
            {
                multipliedMatrix.datavector.at(i).at(j) +=  datavector.at(i).at(k) * matrix.datavector.at(k).at(j);
            }
            //cout<<(*multipliedMatrix)[i][j]<<endl;
        }
    }
    return multipliedMatrix;
}

有没有更好的写法??到目前为止,矩阵乘法运算在我的应用程序中占用了大部分时间。也许有做这种事情的好/快图书馆? 但是,我宁愿不能使用使用图形卡进行数学运算的库,因为我在带有集成图形卡的笔记本电脑上工作。

最佳答案

Eigen是迄今为止最快的线性代数库之一,如果不是最快的话。它写得很好,质量很高。此外,它使用表达式模板,使编写的代码更具可读性。刚刚发布的版本 3 使用 OpenMP 进行数据并行处理。

#include <iostream>
#include <Eigen/Dense>

using Eigen::MatrixXd;

int main()
{
  MatrixXd m(2,2);
  m(0,0) = 3;
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
  std::cout << m << std::endl;
}

关于c++ - 如何优化矩阵乘法运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061921/

相关文章:

c++ - 使用初始化列表时基本构造函数未被调用两次

python - 使用 bool 矩阵替换 for 循环以执行高级索引

c++ - Eigen 库中的稀疏稀疏积 A^T*A 优化

performance - OpenMP 通过三重 for 循环并行化矩阵乘法(性能问题)

c++ - 如何获取 std::unordered_map 的最大元素?

c++ - C++ 标准库是否禁止非标准迭代器类别?

arrays - 在大矩阵中查找许多子矩阵的总和?

android - 位图的旋转矩阵 - Android

c - 使用 DP 的链式矩阵乘法的解释?

C++ 将元素复制到新列表中