裏 RjpWiki

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

最適化なんかしなくてよい その3

2012年05月18日 | ブログラミング

本家 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秒にも満たないのだから,あれこれ小細工を弄する必要は全くないと言っていいだろう。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 最適化なんかしなくてよい その2 | トップ | 最適化なんかしなくてよい その4 »
最新の画像もっと見る

コメントを投稿

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