高效复制/转换大矩阵std :: vector <std :: vector <double>&gt;和犰狳arma :: mat

时间:2016-08-17 20:31:17

标签: c++11 matrix armadillo stl-algorithm emplace

之间是否存在有效的复制机制
            std::vector<std::vector<double>> std_mat 
            arma::mat arma_mat

其中arma :: mat arma_mat指的是犰狳矩阵/数学库。

http://arma.sourceforge.net/

我的项目依赖于两个独立的矩阵/数据采集库,其中矩阵分别如上定义。但是,在处理管道的某个阶段,我需要将一个复制到另一个,以避免破坏遗留代码。我想知道是否有某种铸造操作员从一个到另一个(因此我们不必复制)或者如果没有,是一种有效的复制机制(类似于vector.emplace_back概念)。现在我使用双循环但我相信它可以更有效率。

1 个答案:

答案 0 :(得分:1)

您可以通过改变使用矢量/内存的方式来避免复制。

如果你看documentation

  

mat(ptr_aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = false)

     

使用来自可写辅助(外部)内存的数据创建矩阵,其中ptr_aux_mem是指向内存的指针。默认情况下   matrix分配自己的内存并从辅助中复制数据   记忆(为安全起见)。但是,如果将copy_aux_mem设置为false,则   矩阵将直接使用辅助存储器(即没有   复印);这比较快,但除非你知道什么,否则可能很危险   你在干嘛!

如果您知道矩阵具有固定大小,则可以通过提供一块内存来构造mat。请注意文档说明:

  

元素以列主要排序(即逐列)存储