裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

cxxfunction 使えそうなものを作ってみた

2011年11月04日 | ブログラミング

ColMeans, ColSums はあるが,colMins はないので,簡単だし作ってみた。

> src <- '
+ Rcpp::NumericMatrix x(ax);
+ int nc = x.ncol();
+ int nr = x.nrow();
+ Rcpp::NumericVector res(nc);
+ for (int j = 0; j < nc; j++) {
+     double res1 = x(0, j);
+     for (int i = 1; i < nr; i++) {
+         if (res1 > x(i, j)) res1 = x(i, j);
+     }
+     res[j] = res1;
+ }
+ return res;
+ '
>
> colMins <- cxxfunction(signature(ax="numeric"), src, plugin="Rcpp")
> colMins(matrix(1:24, 4))
[1]  1  5  9 13 17 21
> x <- matrix(rnorm(100000000), 10000)
> system.time(a <- apply(x, 2, min))
   ユーザ   システム       経過 
     2.776      1.205      3.966
> system.time(b <- colMins(x))
   ユーザ   システム       経過 
     0.265      0.000      0.265
> all.equal(a, b)
[1] TRUE

まあ,apply で十分速いという評価で。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村