裏 RjpWiki

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

ダメ出し:小細工せずに素直に(あるいは,効果を確かめてから)

2012年08月22日 | ブログラミング

「kingqwertの覚書」 の
http://d.hatena.ne.jp/kingqwert/
2012-08-22 の項
http://d.hatena.ne.jp/kingqwert/20120822

「リサイクル規則をうまく使う方法」を挙げてあるが,そんなに良い方法ではない。内部では結局の所リサイクル処理をしているので,1:(n%/%2)*2 のように選択する添え字ベクトルを指定してやるのと同等の速度である。むしろ,一番最後の例のように,添え字が整数ベクトルになるようにすれば,一番速い。

> n <- 10000000L
> a <- rnorm(n)
>
> invisible(gc()); invisible(gc()); system.time({
+     x <- a[seq_along(a) %% 2 == 0]
+ })
   ユーザ   システム       経過  
     0.363      0.010      0.371
> invisible(gc()); invisible(gc()); system.time({
+     y <- a[!(seq_along(a) %% 2)]
+ })
   ユーザ   システム       経過  
     0.345      0.000      0.344
> invisible(gc()); invisible(gc()); system.time({
+     z <- a[c(FALSE,TRUE)]
+ })
   ユーザ   システム       経過  
     0.076      0.001      0.077
> invisible(gc()); invisible(gc()); system.time({
+     u <- a[1:(n%/%2)*2]
+ })
   ユーザ   システム       経過  
     0.063      0.001      0.063
> invisible(gc()); invisible(gc()); system.time({
+     v <- a[1:(n%/%2)*2L]                        # 最速!!
+ })
   ユーザ   システム       経過  
     0.048      0.000      0.048

> all(x == y)
[1] TRUE
> all(x == z)
[1] TRUE
> all(x == u)
[1] TRUE
> all(x == v)
[1] TRUE

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ダメ出し:もう何回も書いた... | トップ | ダメ出し:小細工せずに素直... »
最新の画像もっと見る

コメントを投稿

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