通常,当我们用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跳转。
答案 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
*/
这对于大型矩阵而言可能是昂贵的。在这种情况下,最好是调整您的算法。