我正在尝试创建涉及大型多维数组(例如:dimensions = 20 x 1000 x 60),我在R中编写它们的方式运行非常慢。我下载了Rcpp,并一直在尝试实现这样一个模型,因为C++处理循环非常好。通常,我会在R中编写这样一个函数:
fun <- function(x,y,z){
f <- array(0, dim = c(18,50,10));
for (i in 1:18){
for (j in 1:50){
for (l in 1:10){
f[i,j,l] <- (i*j/10) + l;
}
}
}
return(f[x,y,z])
}
并且如预期的,函数产生:
> fun(10,20,5)
[1] 25
这是我认为Rcpp中的等效代码应该是这样的:
cppFunction('
double fun(int x, int y, int z){
int f[18][50][10] = {0};
for (int i = 1; i > 18; i++){
for (int j = 1; j > 50; j++){
for (int l = 1; l > 10; l++){
f[i][j][l] = (i * j/10) + l;
}
}
}
return f[x][y][z];
}
')
但每次我使用这个函数时都会得到0。
> fun(10,20,5)
[1] 0
我将实现的实际模型使用向后迭代,所以我确实需要数组作为函数的一部分,或者,返回数组本身也可以达到我的目的,但我也没有运气。
任何帮助都将受到真诚的感谢。
谢谢
1条答案
按热度按时间px9o7tmv1#
记住C++是0索引的。你需要从0开始索引,而不是像R中那样从1开始。你还需要确保你的循环只在
i
,j
和l
的值小于数组的维数时才继续(所以把>
换成<
。你的数组需要是double
的数组,不是int
:试验结果: