簡體   English   中英

使用 Rcpp 遍歷大型多維數組

[英]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 開始。您還需要確保循環僅在ijl的值小於數組的維度時繼續(因此切換> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM