【问题标题】:How to define a list of matrix (array) in c++如何在 C++ 中定义矩阵(数组)列表
【发布时间】:2018-02-15 05:01:33
【问题描述】:

我正在尝试在 C++ 中制作大对象,使用 Rcpp lib,它是一个负数和正数矩阵,我定义了一个 double 类型的辅助二维数组,因为由于对象的维度,我无法使用 NumericMatrix。 现在我正在尝试将这个巨大的数组放入一个 std::list 中,例如:

std::list<NumericMatrix> listOfMatrix;      

但是对于数组:

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

【问题讨论】:

  • 对不起,错误的代码 cmets,我是这个'-.-的新手'-.-
  • 你有什么问题?您尝试的方法不起作用吗?
  • 这段代码错了,我想做一个二维数组列表,不知道怎么做
  • 使用嵌套的std::arraystd::vector。你真的需要使用std::list吗?它应该是您最后选择的结构。
  • 好吧,我可以尝试在 c++ 中使用一种 cbind() 来做一个更大的数组

标签: c++ arrays list rcpp


【解决方案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> 

您可以像上面一样将其中的几个组合到一个列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2020-08-28
    • 2017-05-03
    • 2020-05-31
    • 2019-11-22
    相关资源
    最近更新 更多