【发布时间】:2011-12-15 08:31:10
【问题描述】:
我正在优化严重依赖于定制矩阵库的代码(它不会被排除在项目之外,因为它无处不在。这不好,但这是事实......)许多计算都是用10-20 行和列的矩阵,许多计算包括二次形式,如
C = A*B*A'
我意识到 A 通常是稀疏的,我想利用这个事实。所以我正在寻找一种可以处理这种情况的算法。数值稳定性很重要。有什么我可以用的吗? (我没有编写我们的库,所以我不知道是否有任何我应该考虑的陷阱?)
由于“我们的”简单 O(n³) 乘法方法在目标平台上的执行速度比 Eigen 3 快,因为我需要数值稳定性并且矩阵不是很大,我猜 Strassen 算法以及 Coppersmith–Winograd 算法不是我要找的。相反,它只是二次形式的乘法,可以让我轻松检查 A 中的零。
【问题讨论】:
-
我只是想知道谁投票给了“关闭”?我发现这个问题完全有效并且与编程相关。
-
我不确定你是否会从利用这么小的矩阵的稀疏性中获得很多好处。
标签: c++ algorithm math sparse-matrix matrix-multiplication