「kingqwertの覚書」 の
http://d.hatena.ne.jp/kingqwert/
2012-08-22 の項
http://d.hatena.ne.jp/kingqwert/20120822
「リサイクル規則をうまく使う方法」を挙げてあるが,そんなに良い方法ではない。内部では結局の所リサイクル処理をしているので,1:(n%/%2)*2 のように選択する添え字ベクトルを指定してやるのと同等の速度である。むしろ,一番最後の例のように,添え字が整数ベクトルになるようにすれば,一番速い。
> n <- 10000000L
> a <- rnorm(n)
>
> invisible(gc()); invisible(gc()); system.time({
+ x <- a[seq_along(a) %% 2 == 0]
+ })
ユーザ システム 経過
0.363 0.010 0.371
> invisible(gc()); invisible(gc()); system.time({
+ y <- a[!(seq_along(a) %% 2)]
+ })
ユーザ システム 経過
0.345 0.000 0.344
> invisible(gc()); invisible(gc()); system.time({
+ z <- a[c(FALSE,TRUE)]
+ })
ユーザ システム 経過
0.076 0.001 0.077
> invisible(gc()); invisible(gc()); system.time({
+ u <- a[1:(n%/%2)*2]
+ })
ユーザ システム 経過
0.063 0.001 0.063
> invisible(gc()); invisible(gc()); system.time({
+ v <- a[1:(n%/%2)*2L] # 最速!!
+ })
ユーザ システム 経過
0.048 0.000 0.048
> all(x == y)
[1] TRUE
> all(x == z)
[1] TRUE
> all(x == u)
[1] TRUE
> all(x == v)
[1] TRUE
最新の画像[もっと見る]
- 算額(その2135) 9時間前
- 算額(その2134) 16時間前
- 算額(その2133) 1日前
- 算額(その2132) 3日前
- 算額(その2131) 4日前
- 算額(その2130) 4日前
- 算額(その2129) 5日前
- 算額(その2128) 5日前
- 算額(その2127) 6日前
- 算額(その2126) 6日前
※コメント投稿者のブログIDはブログ作成者のみに通知されます