裏 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でシェアする

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

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