【发布时间】:2011-08-29 01:10:05
【问题描述】:
我需要在我的应用程序中执行大量矩阵运算。最耗时的是矩阵乘法。我是这样实现的
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;
}
有没有更好的写法??到目前为止,矩阵乘法运算在我的应用程序中花费了大部分时间。也许有做这种事情的好/快图书馆吗? 但是我宁愿不能使用使用图形卡进行数学运算的库,因为我在带有集成图形卡的笔记本电脑上工作。
【问题讨论】:
-
一般来说,如果你需要一个相当标准的高效完成的事情,你应该寻找一个做得好的库。它们是由通常比您更了解操作的人编写的,并且他们可以投入比您更多的时间来提高效率。
-
这些是密集矩阵吗?如果不是(在很多应用程序中你有稀疏矩阵),这个简单的算法将浪费大量时间乘以零。当然,为了有效地处理稀疏矩阵,您需要彻底改变数据的存储方式。
-
查看Blaze library,它可以很好地处理矩阵-矩阵乘法并提供易于使用的语法。
标签: c++ matrix matrix-multiplication