[英]Looping Through Large, Multidimensional Array Using Rcpp
我正在嘗試創建涉及循環遍歷大型多維數組(例如:維度 = 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
我將要實現的實際模型使用反向迭代,所以我確實需要數組作為函數的一部分。 或者,返回數組本身也適用於我的目的,但我也沒有運氣。
任何幫助將不勝感激。
謝謝
請記住,C++ 是 0 索引的。 您需要從 0 開始索引,而不是像在 R 中那樣從 1 開始。您還需要確保循環僅在i
、 j
和l
的值小於數組的維度時繼續(因此切換>
for <
. 你的數組需要是double
的數組,而不是int
:
Rcpp::cppFunction('
double fun(int x, int y, int z){
double f[18][50][10] = {0};
for (int i = 0; i < 18; i++){
for (int j = 0; j < 50; j++){
for (int l = 0; l < 10; l++){
f[i][j][l] = (i * j/10) + l;
}
}
}
return f[x][y][z];
}
')
測試給出:
fun(10, 20, 5)
#> [1] 25
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.