裏 RjpWiki

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

ダメ出し:R 2.13.0のコンパイラをつかってみる (2) Cλ

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

R 2.13.0のコンパイラをつかってみる (2) Cλ
http://ito-hi.blog.so-net.ne.jp/2011-04-21

Morisita の Cλ を求めるのに,行ごとの組合せで n.cmm × n.cmm 回 clambda 関数を呼んでいるが,無駄
対称行列なのだから,せめて半分だけ計算する。

以下,原著者によるプログラムのパフォーマンス

> system.time(a1 <- mclambda(cmm))
   ユーザ   システム       経過 
    10.360      0.136     10.423
> system.time(a2 <- mclambda2(cmm)) # コンパイル版
   ユーザ   システム       経過 
     7.993      0.188      8.127
> system.time(a3 <- c.mclambda(cmm)) # コンパイル版
   ユーザ   システム       経過 
     7.093      0.278      7.333

ベクトル演算を使えば,コンパイル無しで,コンパイルしたものより 100 倍速くなる
以下だけで,480×480 の組合せの Cλ が一挙に得られる。

> system.time({
+     n1n2 <- rowSums(cmm)
+     l1l2 <- rowSums(cmm*(cmm-1))/(n1n2*(n1n2-1))
+     cc <- cmm%*%t(cmm)
+     l1pl2 <- outer(l1l2, l1l2, "+")
+     n1mn2 <- outer(n1n2, n1n2, "*")
+     ans <- 2*cc/(l1pl2*n1mn2)
+ })
   ユーザ   システム       経過 
     0.072      0.011      0.083 # 100 倍速!!

当然ながら,結果は等しい
> all.equal(a1, ans)
[1] TRUE
> all.equal(a2, ans)
[1] TRUE
> all.equal(a3, ans)
[1] TRUE

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« cxxfunction NA の扱いと,ポ... | トップ | ダメ出し:R 2.13のコンパイ... »
最新の画像もっと見る

コメントを投稿

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