【问题标题】:Efficient copying/casting of large matrix std::vector<std::vector<double>> and armadillo arma::mat大矩阵 std::vector<std::vector<double>> 和犰狳 arma::mat 的高效复制/转换
【发布时间】:2016-08-17 20:31:17
【问题描述】:

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

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

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

http://arma.sourceforge.net/

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

【问题讨论】:

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


    【解决方案1】:

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

    如果你看documentation

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

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

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

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

    【讨论】:

    • 列专业是连续的还是在堆上?我猜连续会很容易。谢谢你的建议。我会查看详细的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多