0

之间是否有有效的复制机制

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

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

http://arma.sourceforge.net/

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

4

1 回答 1

1

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

如果您查看文档

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

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

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

元素以列优先顺序存储(即逐列)

于 2016-08-18T01:23:16.653 回答