裏 RjpWiki

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

キー入力が短ければよいというものでもない

2014年04月30日 | ブログラミング

Rで,長さ100の数列があって,連続する5個の数の和を全て(96個)欲しいとき,どうすれば賢いかな」だけど..

何をもって「賢い」とすべきかだが...

embed のソース見てみると分かるけど,結構真っ正直にやっているだけ。
だったら,ださい for を使って,もっともっと素朴にやってもおんなじようなものだろう思ったが,意外にも速かった。ベクトル演算が速いからかな。

> x = 1:10^6
> m = 5
> system.time(rowSums(embed(x, m)))
   ユーザ   システム       経過  
     0.233      0.033      0.264
> system.time({
+     n = length(x)
+     ans = x[1:(n-m+1)]
+     for (i in 2:m) {
+         ans = ans+x[i:(n-m+i)]
+     }
+ })
   ユーザ   システム       経過  
     0.074      0.012      0.085

> x = 1:10^8
> m = 5
> system.time(rowSums(embed(x, m)))
   ユーザ   システム       経過  
    15.366      3.920     19.566
> system.time({
+     n = length(x)
+     ans = x[1:(n-m+1)]
+     for (i in 2:m) {
+         ans = ans+x[i:(n-m+i)]
+     }
+ })
   ユーザ   システム       経過  
     7.871      2.709     10.390

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 正規表現 | トップ | 最適な関数を最適に使おう »
最新の画像もっと見る

コメントを投稿

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