2016-08-17 139 views
0

高效复制大矩阵的std /铸造::矢量<性病::矢量<double>>和犰狳ARMA ::垫

  std::vector<std::vector<double>> std_mat 
      arma::mat arma_mat 

之间的有效的复制机制,其中ARMA ::垫arma_mat指犰狳矩阵/数学库。

http://arma.sourceforge.net/

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

回答

2

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

如果看看documentation

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

创建使用从可写辅助(外部)存储器,其中ptr_aux_mem是指向存储器中的数据的矩阵。默认情况下, 矩阵分配自己的内存并从内存中复制数据(为了安全起见)。但是,如果copy_aux_mem设置为false,那么 矩阵将直接使用辅助存储器(即,不复制 );这是更快,但可能是危险的,除非你知道你在做什么 !

如果您知道您的矩阵具有固定大小,则可以通过提供大块内存来构造mat。该文件说要小心:

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

+0

是列专业连续或在堆?我猜,连续性会让事情变得简单。感谢您的建议。我会研究详细的文档。 – Pal

+0

看起来像是连续的,最好看看文档:) –

相关问题