如何在c ++中定义矩阵(数组)列表

时间:2017-09-06 15:58:49

标签: c++ arrays list rcpp

我试图在c ++中创建大对象,使用Rcpp lib,这是一个负数和正数的矩阵,我定义了一个double类型的辅助二维数组,因为我不能使用NumericMatrix,因为对象的尺寸。登记/> 现在我试图把这个巨大的数组放到一个std :: list中,例如:

std::list<NumericMatrix> listOfMatrix;      

但是有了数组:

std::list<double array[nrows][ncols]> listOfMarix;

1 个答案:

答案 0 :(得分:1)

您想要Rcpp::List作为回报。

这是一个包含两个矩阵的非常简单的例子;你也可以使用多维数组但不太常见。另请参阅RcppArmadillo的矢量,矩阵,立方体和字段类型。

R> library(Rcpp)
R> cppFunction("Rcpp::List foo() { return Rcpp::List::create(Rcpp::NumericMatrix(2,2), Rcpp::NumericMatrix(3,3)); }")
R> foo()
[[1]]
     [,1] [,2]
[1,]    0    0
[2,]    0    0

[[2]]
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0
[3,]    0    0    0

R> 

在R中,一切都只是一个连续的向量。矩阵恰好具有(大小2)维度;你可以将它推广到三个或更多维度 - 但这种数据结构在R中很少见,并且转换器很少。

以下是2x2x2阵列的最小示例:

R> cppFunction('Rcpp::NumericVector bar() { Rcpp::NumericVector x(8); Rcpp::IntegerVector d = Rcpp::IntegerVector::create(2,2,2); x.attr("dim") = d; return(x); }')
R> bar()
, , 1

     [,1] [,2]
[1,]    0    0
[2,]    0    0

, , 2

     [,1] [,2]
[1,]    0    0
[2,]    0    0

R> 

您可以按照与上面相同的方式将其中的多个组合在一起。