Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包装arma::Mat时如何避免深度复制<;双倍>;到Rcpp::NumericMatrix_R_Rcpp_Rcpparmadillo - Fatal编程技术网

包装arma::Mat时如何避免深度复制<;双倍>;到Rcpp::NumericMatrix

包装arma::Mat时如何避免深度复制<;双倍>;到Rcpp::NumericMatrix,r,rcpp,rcpparmadillo,R,Rcpp,Rcpparmadillo,但问题是,如何让R/Rcpp接管“ptr”,以便直接从现有内存构建NumericMatrix?我们实际上是在第三次实现犰狳如何获取R对象,而且不应该很昂贵。请参阅inst/examples/中的一些计时练习,也许可以在您的终端尝试一些。在进入的过程中,我们清楚地使用了advancend构造函数Arma。在这里,我认为,我们需要分配确保R的分配器得到使用,然后代理Armadillo返回R对象的工作。请参阅@Dirk使用R分配和使用Armadillo的高级构造函数的想法的实现。推理是完全不同的,所以

但问题是,如何让R/Rcpp接管“ptr”,以便直接从现有内存构建NumericMatrix?

我们实际上是在第三次实现犰狳如何获取R对象,而且不应该很昂贵。请参阅
inst/examples/
中的一些计时练习,也许可以在您的终端尝试一些。在进入的过程中,我们清楚地使用了advancend构造函数Arma。在这里,我认为,我们需要分配确保R的分配器得到使用,然后代理Armadillo返回R对象的工作。请参阅@Dirk使用R分配和使用Armadillo的高级构造函数的想法的实现。推理是完全不同的,所以从我的观点来看没有重复…那么,除非我遗漏了什么,为什么不创建对象作为
Rcpp::numerimatrix
,然后使用高级构造函数创建
arma::mat
对象,以便在整个函数中对la@RalfStubner的链接答案进行操作,然后,您可以在末尾返回原始的
Rcpp::numerimatrix
对象。我想这就是德克和拉尔夫suggesting@duckmayr据我所知,在调用外部函数之前,Mike不知道矩阵的大小,因此不可能让R分配所需的内存。我担心在这种情况下没有办法复制数据。而且,
memcpy
很便宜。正如丹尼尔·莱米尔(Daniel Lemire)昨天在博客中所说()分配可能不是,但对于我们的科学工作负载来说,这会成为瓶颈吗?如果是的话(比如说,蒙特卡罗运行),你可以预先分配块……我们已经有效地实现了犰狳如何获得R对象的第三次实现,而且应该不会很昂贵。请参阅
inst/examples/
中的一些计时练习,也许可以在您的终端尝试一些。在进入的过程中,我们清楚地使用了advancend构造函数Arma。在这里,我认为,我们需要分配确保R的分配器得到使用,然后代理Armadillo返回R对象的工作。请参阅@Dirk使用R分配和使用Armadillo的高级构造函数的想法的实现。推理是完全不同的,所以从我的观点来看没有重复…那么,除非我遗漏了什么,为什么不创建对象作为
Rcpp::numerimatrix
,然后使用高级构造函数创建
arma::mat
对象,以便在整个函数中对la@RalfStubner的链接答案进行操作,然后,您可以在末尾返回原始的
Rcpp::numerimatrix
对象。我想这就是德克和拉尔夫suggesting@duckmayr据我所知,在调用外部函数之前,Mike不知道矩阵的大小,因此不可能让R分配所需的内存。我担心在这种情况下没有办法复制数据。而且,
memcpy
很便宜。正如丹尼尔·莱米尔(Daniel Lemire)昨天在博客中所说()分配可能不是,但对于我们的科学工作负载来说,这会成为瓶颈吗?如果是的话(比如说蒙特卡罗),你可以预先分配块。。。
NumericMatrix res = wrap(mat);// mat is an existing arma::Mat<double>
double * ptr = mat.memptr();
access::rw(mat.mem) = 0;