从 C 数组(列优先)转换为犰狳矩阵(arma::mat)而不复制
Posted
技术标签:
【中文标题】从 C 数组(列优先)转换为犰狳矩阵(arma::mat)而不复制【英文标题】:convert from C array (column-major) to armadillo matrix (arma::mat) without copying 【发布时间】:2016-01-14 07:54:24 【问题描述】:我有一个指向列优先的 C 双数组的指针,它想转换为 arma::mat
,我从文档中了解到它也是列优先的。
我见过std::transform
函数,但我相信 std 中的矩阵是行优先的。在犰狳包中有conv_to<mat>::from()
,它似乎可以与std::array
或arma::mat
一起使用,这可以与列主要C 数组一起使用吗?。
您能告诉我如何将 C 结构传递给 arma::mat
而不复制并返回到 C 数组吗?
非常感谢
【问题讨论】:
【参考方案1】:来自犰狳的文档: (http://arma.sourceforge.net/docs.html#Mat)
高级构造函数
mat(ptr_aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = false)
使用可写辅助(外部)内存中的数据创建矩阵,其中 ptr_aux_mem 是指向内存的指针。默认情况下,矩阵分配自己的内存并从辅助内存中复制数据(为了安全)。但是,如果将 copy_aux_mem 设置为 false,则矩阵将改为直接使用辅助内存(即不复制);这更快,但除非您知道自己在做什么,否则可能会很危险!
strict参数只有在copy_aux_mem设置为false时才生效(即矩阵直接使用辅助内存)
当 strict 设置为 false 时,矩阵将使用辅助内存,直到大小发生变化 当 strict 设置为 true 时,矩阵将在其生命周期内绑定到辅助内存;矩阵中的元素个数不能改变 在 6.000+ 版本中默认设置为 false 在 5.600 及更早版本中默认设置为 true
【讨论】:
非常感谢您的回答。有没有办法在不复制的情况下将arma::mat
返回到以列为主的 C 数组?
可能使用“.memptr()” - 只需查看文档即可。我以前从没用过犰狳……以上是关于从 C 数组(列优先)转换为犰狳矩阵(arma::mat)而不复制的主要内容,如果未能解决你的问题,请参考以下文章