本家 Rjpwiki の「Rコード最適化のコツと実例集」にあるのだけど。。。みんな~,騙されるんじゃないぞ~!
> 変数初期化のコツ。同一のベクトル、配列変数を全要素 0 で繰返し初期化する(良くあること)場合、既存の同じサイズの変数に 0 を掛ければ済む。x-x でも同じこと(少し早くなるとのコメント)。全要素 1 で初期化したければ、0*x + 1 とする。0 は無ならず
> 確かに,y <- 0*x は速いですね。y <- x-x の方がもう少しだけ速いようです。 -- 2004-06-23 (水) 10:41:05
> 1で初期化する場合は0*x+1よりx^0が高速。さらに論理値で良ければx==xがもっと高速 -- aaa? 2009-05-01 (金) 06:31:21
ガセ 全部,ウソッパチ
> x <- runif(100000000)
> gc();gc();system.time(y <- 0*x)
ユーザ システム 経過
0.223 0.216 0.437
> gc();gc();system.time(y <- x-x) # 0*x より速くなることもない
ユーザ システム 経過
0.229 0.220 0.447
奇をてらう必要はない。素直にやるのが一番速い。 <-- 四則演算も結構高くつく
> gc();gc();system.time(y <- numeric(length(x)))
ユーザ システム 経過
0.117 0.223 0.338
===============================================
> gc();gc();system.time(y <- 0*x+1)
ユーザ システム 経過
0.477 0.433 0.906
> gc();gc();system.time(y <- x^0) # 全然,速くない
ユーザ システム 経過
0.613 0.216 0.825
> gc();gc();system.time(y <- x==x) # 全然,速くない
ユーザ システム 経過
0.629 0.112 0.739
奇をてらう必要はない。素直にやるのが一番速い。
> gc();gc();system.time(y <- numeric(length(x))+1)
ユーザ システム 経過
0.370 0.443 0.809
昔は本当だったトリビアも,今ではガセになりはてているものもある。
マシンやコンパイラの違いによることもあるけど。
それにしても,毎度いうことだが,これだけの計算量で違いは1秒にも満たないのだから,あれこれ小細工を弄する必要は全くないと言っていいだろう。
最新の画像[もっと見る]
- 算額(その2135) 10時間前
- 算額(その2134) 16時間前
- 算額(その2133) 1日前
- 算額(その2132) 3日前
- 算額(その2131) 4日前
- 算額(その2130) 4日前
- 算額(その2129) 5日前
- 算額(その2128) 5日前
- 算額(その2127) 6日前
- 算額(その2126) 6日前
※コメント投稿者のブログIDはブログ作成者のみに通知されます