【发布时间】:2015-06-06 18:47:25
【问题描述】:
我在 C++ 中使用 doubles 的大型矩阵。我需要从这些矩阵中获取行或列并将它们传递给函数。我能做到这一点的最快方法是什么?
- 一种方法是编写一个函数,将所需行或列的副本作为
std::vector返回。 - 另一种方法是将整个事物作为参考传递并修改函数以能够读取所需的值。
还有其他选择吗?你推荐哪一个?
顺便说一句,你建议我如何将数据存储在矩阵类中?我现在正在使用std::vector< std::vector< double > >。
编辑
我必须提到矩阵可能有两个以上的维度。所以在这里使用 boost 或 arma::mat 是不可能的。虽然,我在图书馆的其他部分使用犰狳。
【问题讨论】:
-
vector
是一个糟糕的选择 - 只需使用单个向量并提供运算符 E operator () (row, column) -
如果您的矩阵是
vector<vector<double>>,那么您可以传递对行的引用(即vector<double>&) -
我还没有尝试过,但是 boost 1.58 有一个线性代数库,它有一个密集和稀疏的矩阵实现
-
这真的取决于函数在做什么以及矩阵有多大。例如,如果函数多次访问列的元素,那么制作副本可能是您的最佳选择,因为它会更好地使用缓存。在性能方面,您希望衡量您的实际用例。
-
犰狳有cube class,可以像“3D矩阵”一样对待