裏 RjpWiki

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

for ループが遅いなんて,誰が言った?

2012年02月25日 | ブログラミング

色々な条件により細かい部分は異なるが,以下のようなプログラムによって分かったことは衝撃的?

nr <- 10000
nc <- 1000
x <- matrix(rnorm(nr*nc), nr, nc)
d <- as.data.frame(x)

# データフレームに対して
## for ループ
gc();gc();system.time({
    m1 <- numeric(nc)
    for (i in 1:nc) {
        m1[i] <- mean(d[,i])
    }
})

## apply
system.time({
    m2 <- apply(d, 2, mean)
})

## colMeans
system.time({
    m3 <- colMeans(d)
})

## sapply
system.time({
    m4 <- sapply(d, mean)
})

# 行列に対して
## for ループ
system.time({
    M1 <- numeric(nc)
    for (i in 1:nc) {
        M1[i] <- mean(x[,i])
    }
})

## apply
system.time({
    M2 <- apply(x, 2, mean)
})

## colMeans
system.time({
    M3 <- colMeans(x)
})

1. 行列に対しての colMeans が一番速い

2. 行列では apply より for の方が速い

3. データフレームでは for が一番速い

4. データフレームでは colMeans はたいして速くない

5. apply はいずれに対しても一番遅い

その他,結果の通り!!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

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