「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