我正在使用 double
的大矩阵在 C++ 中。我需要从这些矩阵中获取行或列并将它们传递给函数。最快的方法是什么?
- 一种方法是编写一个函数,以
std::vector
形式返回所需行或列的拷贝。 . - 另一种方法是将整个事物作为引用传递并修改函数以能够读取所需的值。
还有其他选择吗?你推荐哪一个?
顺便说一句,你建议我如何将数据存储在矩阵类中?我正在使用 std::vector< std::vector< double > >
现在。
编辑
我必须提到矩阵可能有两个以上的维度。所以使用 boost 或 arma::mat
这是不可能的。虽然,我在图书馆的其他地方使用 Armadillo 。
最佳答案
如果大于 2 的可变维数是关键要求,请查看 boost's multidimensional array library .它具有高效(无复制)“views”,您可以使用它来引用完整矩阵的低维“切片”。
对于这类事情什么是“最快”的细节在很大程度上取决于你到底在做什么,以及访问模式/工作集“足迹”如何适应你的硬件的不同级别的缓存和内存延迟;在实践中,值得复制到更紧凑的表示以获得更多缓存一致访问,而不是进行稀疏跨步访问,这只会浪费大量缓存行。备选方案是 Morton-order访问至少可以在所有轴上分摊“坏轴”影响的方案。不过,只有您自己对自己的代码和硬件上的用例进行基准测试才能真正回答这个问题。
(请注意,我不会将 Boost.MultiArray 用于 2 维数组 - 线性代数/图像处理应用程序有更快、更好的选择 - 但对于 3+,它值得考虑。)
关于c++ - 在 C++ 中处理大型矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30686413/