按行反转数字矩阵

时间:2015-08-11 16:01:37

标签: c++ rcpp

使用db.collection.aggregate([ { "$sort": { "value": 1 }}, { "$group": { "_id": "$type", "values": { "$push": "$value" }}}, { "$project": { "values": { "$slice": [ "$values", 0, 2 ] }}} ]) ,对于我在R中编写的包,我试图反转NumericMatrix,以便最后一行现在成为第一行,第一行将成为最后一行,在其他行中单词,相对行索引将从File[] list = (new File("/mnt/sdcard")).listFiles(); for(File f : list){ Log.i("bairro", f.getPath()); } 变为Rcpp

所以,如果我声明以下函数:

1, 2, 3, ... n

我有一个名为'mid'的'N x M'数字矩阵,我试图通过以下方式按行反转:

n, n-1, n-2, .... 1

为什么我得到以下输出,表明没有任何改变...... ???

NumericMatrix reverseByRow(NumericMatrix in){
  int r = in.nrow();
  NumericMatrix nw(r,in.ncol());
  for(int i = 0; i < r; i++){
    nw.row(i) = in.row(r-i-1);
  }
  return nw;
}

当然我错过了一些非常明显的东西...... ???

1 个答案:

答案 0 :(得分:2)

这是一个&#39;固定&#39;具有合适变量名称的版本:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericMatrix reverseByRow(NumericMatrix inmat) {
  int r = inmat.nrow();
  NumericMatrix nw(r,inmat.ncol());
  for(int i = 0; i < r; i++){
    nw.row(i) = inmat.row(r-i-1);
  }
  return nw;
}

/*** R
M <- matrix(1:9, 3, 3)
M
reverseByRow(M)
*/

按预期工作:

R> sourceCpp("/tmp/nicholas.cpp")

R> M <- matrix(1:9, 3, 3)

R> M
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

R> reverseByRow(M)
     [,1] [,2] [,3]
[1,]    3    6    9
[2,]    2    5    8
[3,]    1    4    7
R>