gpt4 book ai didi

c++ - 在 Rcpp 中分配一个大型二维数组 NumericVectors

转载 作者:行者123 更新时间:2023-11-30 04:02:09 25 4
gpt4 key购买 nike

我正在尝试分配一个大型(大概)2D 数组的 NumericVectors(总内存应该只有 16Mb 左右,除非有开销),但我遇到了堆栈溢出。这是我能想到的最小的可重现示例:

require(Rcpp)
require(inline)
testfun = cxxfunction(
signature(x="list"),
body='using namespace std;
vector<vector<NumericVector> > rs=as< vector<vector<NumericVector> > >( x );
return wrap(rs);',
plugin="Rcpp")
x=lapply(1:1000,function(g) lapply(1:1000, function(h) runif(3)))
testfun(x)

使用 gdb 进行分析只告诉我,我在 libR.so 递归中非常深入。请注意,虽然这里的数组是矩形的,所以我可以在我的实际问题中使用 NumericMatrix,但它们会呈锯齿状。感谢您的任何想法。

最佳答案

编辑:使用(相当新的)ListOf<T> 的解决方案模板类:

require(Rcpp)
require(inline)
testfun = cxxfunction(
signature(x="list"),
body='using namespace std;
ListOf<ListOf<NumericVector> > rs=as< ListOf<ListOf<NumericVector> > >( x );
return wrap(rs);',
plugin="Rcpp")
x=lapply(1:1000,function(g) lapply(1:1000, function(h) runif(3)))
testfun(x)

我们只是替换所有对 std::vector 的调用与 Rcpp::ListOf而且,有点神奇的是,它起作用了。最重要的是 - 数据不会复制到此处(假设 x 确实是一个数字 vector 列表)。

关于c++ - 在 Rcpp 中分配一个大型二维数组 NumericVectors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com