我正在尝试使用提供的尺寸列表将1D数组映射到3D数组。

这是我的组件:

SEXP data; // my 1D array
// I can initialise new 3D vector in the following way:
NumericVector vector(Dimension(2, 2, 2);
// or the following:
NumericVector vector(data.begin(), data.end());

我没有弄清楚的是如何创建一个既包含数据又包含所需尺寸的NumericVector。

最佳答案

这是可行的,但有点痛苦。我想对新的构造函数或辅助函数的贡献(和经过测试的贡献)将不胜感激。

同时,您可以执行以下示例中的操作。但是要注意行优先和列优先等。另一个选项是RcppArmadillo,它具有将矩阵归纳为3-d的适当“多维数据集”类型。

R> library(inline)
R> fx <- cxxfunction(signature(vs="numeric", ds="integer"), plugin="Rcpp", body='
+    Rcpp::NumericVector v(vs);            // get the data
+    Rcpp::Dimension d(ds);                // get the dim object
+    Rcpp::NumericVector r(d);             // create vec. with correct dims
+    std::copy(v.begin(), v.end(), r.begin());  // and copy
+    return Rcpp::List::create(v, d, r);
+ ')
R> fx(1:8, c(2,2,2))
[[1]]
[1] 1 2 3 4 5 6 7 8

[[2]]
[1] 2 2 2

[[3]]
, , 1

     [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8


R>

关于r - 在Rcpp中构建3D数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12569992/

10-12 17:06