如何首先解析到Rcpp :: NumericMatrix中的行

时间:2019-02-25 06:16:34

标签: rcpp

通常,当我们用c ++编写函数来解析2D数组时,它会穿过第一行,然后移至第二行。

getItemCount

但是,当我使用Rcpp :: NumericMatrix时,它首先解析列。

for(int i = 0; i < ROW_SIZE; i++){
    for(int j = 0; j < COL_SIZE; j++){
        *((Mat+i*COL_SIZE) + j) = value;
    }
}

在编写我之前的代码时,是否有任何方法可以强制它解析行,以将矩阵存储为连续的行,因此指针不必等于COL_SIZE跳转。

1 个答案:

答案 0 :(得分:2)

Rcpp::NumericMatrix仅遵循R布置其内存的方式,该方式处于列主模式。一个简单的解决方案是转置矩阵:

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::NumericMatrix TestMatrixParsing(){
  Rcpp::NumericMatrix xx(4, 5);
  int xsize = xx.nrow() * xx.ncol();
  xx = Rcpp::transpose(xx);
  for (int i = 0; i < xsize; ++i) {
    xx[i] = i + 100;
  }
  xx = Rcpp::transpose(xx);
  return xx;
}

/*** R
TestMatrixParsing()
#      [,1] [,2] [,3] [,4] [,5]
# [1,]  100  101  102  103  104
# [2,]  105  106  107  108  109
# [3,]  110  111  112  113  114
# [4,]  115  116  117  118  119
*/

这对于大型矩阵而言可能是昂贵的。在这种情况下,最好是调整您的算法。

相关问题