裏 RjpWiki

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

乱数をまとめて発生させるという技が裏目に出ることもある

2012年02月02日 | ブログラミング

シミュレーションなどで,使用する乱数をまとめて発生させておいて後で使うというようにすれば効率的であるといわれるが,メモリーギリギリでやるような場合には,それが裏目に出るという実例。おまけに,この場合は for ではなく apply を使ったのに...ということなのだ。

> n <- 1000
> gc()
         used (Mb) gc trigger  (Mb)  max used   (Mb)
Ncells 389200 20.8    1307810  69.9   2554318  136.5
Vcells 815860  6.3  101994529 778.2 151544141 1156.2
> set.seed(123)
> system.time({
+     x <- matrix(rnorm(50*n), 50)
+     m <- apply(x, 2, median)
+ })
   ユーザ   システム       経過 
     0.068      0.001      0.069         小規模な場合は,確かにまとめて取る方が効率的
> set.seed(123)
> system.time({
+     m <- numeric(n)
+     for (i in seq_len(n)) {
+         m[i] <- median(rnorm(50))
+     }
+ })
   ユーザ   システム       経過 
     0.086      0.001      0.093

> n <- 1000000
> gc()
           used  (Mb) gc trigger   (Mb)  max used  (Mb)
Ncells   385959  20.7    1259264   67.3   1835812  98.1
Vcells 51544018 393.3  149518151 1140.8 105639609 806.0
> system.time({
+     x <- matrix(rnorm(50*n), 50)
+     m <- apply(x, 2, median)
+ })
   ユーザ   システム       経過 
    73.343      0.863     73.887         大規模な場合は,逆に遅くなってしまう
> system.time({
+     m <- numeric(n)
+     for (i in seq_len(n)) {
+         m[i] <- median(rnorm(50))
+     }
+ })
   ユーザ   システム       経過 
    66.355      0.629     66.733

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

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

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