c++ - 在 C++ 中处理大型矩阵

标签 c++ c++11 matrix

我正在使用 double 的大矩阵在 C++ 中。我需要从这些矩阵中获取行或列并将它们传递给函数。最快的方法是什么?

  1. 一种方法是编写一个函数,以 std::vector 形式返回所需行或列的拷贝。 .
  2. 另一种方法是将整个事物作为引用传递并修改函数以能够读取所需的值。

还有其他选择吗?你推荐哪一个?

顺便说一句,你建议我如何将数据存储在矩阵类中?我正在使用 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/

相关文章:

c++ - 在 switch 语句的条件下同时具有模板和非模板转换运算符的类

performance - Matlab + CUDA 求解矩阵向量方程 A*x=B 速度慢

c++ - 对象内的字符串数组

c++ - 用于在 C++ 中同步线程的二进制信号量

c++ - C++ 中的公共(public)/私有(private)

c++ - 在每次调用 : should I pass the engine, 分配或两者时生成不同数字的函数?

performance - MATLAB:如何有效地创建一个矩阵,这是外积的结果?

c++ - 将矩阵 c\c++ API 与基于行的索引一起使用

c++ - 代码块上的 Iostream 问题?

c++ - 编译时计算对数组中对元素的差异