裏 RjpWiki

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

ダメ出し:R 2.13のコンパイラをつかってみる(3)

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

R 2.13のコンパイラをつかってみる(3)
http://ito-hi.blog.so-net.ne.jp/2011-07-09-2

> set.seed(1234)
> n <- 10000000 # 速すぎて速度が測れないので多めに設定
>
> x <- rnorm(n, 0, 1)
>
> # ctest2 は test2 をコンパイルしたもの
> test2 <- function(x) {
+   d <- vector("numeric", length(x) - 1)
+   for (i in 1:(length(x) - 1)) {
+     d[i] <- exp(x[i + 1] - x[i])
+   }
+   mean(d)
+ }
>
> ctest2 <- cmpfun(test2)
>
> system.time(a <- ctest2(x)) # for を使ったコンパイラ版(4 つの中では最速)
   ユーザ   システム       経過  
    11.379      0.151     11.585
> a
[1] 2.717731
>
> # test2 をベクトル演算を使って高速化
> test3 <- function(x) {
+     n <- length(x)
+       mean(exp(x[-1]-x[-n]))
+ }
> system.time(ans3 <- test3(x))
   ユーザ   システム       経過  
     0.669      0.268      0.930 # これでも,17 倍速
> ans3
[1] 2.717731
>
> # test2 を インラインにする
> library(inline)
> src <- '
+     Rcpp::NumericVector x(X);
+     int n = x.length();
+     double mean = 0;
+     for (int i = 0; i < n-1; i++) {
+         mean +=exp(x(i+1)-x(i));
+     }
+     return wrap(mean/(n-1));
+ '
> test4 <- cxxfunction(signature(X="numeric"), src, plugin="Rcpp")
> system.time(ans4 <- test4(x))
   ユーザ   システム       経過  
     0.251      0.001      0.250 # 45 倍速
> ans4
[1] 2.717731

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ダメ出し:R 2.13.0のコンパ... | トップ | ダメ出し:2011-11-06 2次計... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事