Rコードの最適化例:ベクトルはベクトルとして操作する
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
SIZE(20){COLOR(magenta){Rコードの最適化例:ベクトルはベクトルとして操作する}} ~
[[Rコード最適化のコツと実例集]] に戻る~
* 添字を全く使わずにすます例
X <- matrix(runif(1000000), nc=1000, nr=1000)
test1 <- function (x) {
s <- 0
for (i in 1:dim(x)[1])
for (j in 1:dim(x)[2])
s <- s + x[i, j] # 添字による操作!
s
}
test2 <- function (x) {
s <- 0
for (e in x) s <- s + e # R の for ループ範囲はベクトル・行列でも可!
s # 順序が問題になる時は困る可能性
}
system.time(test1(X))
[1] 3.39 0.01 3.40 0.00 0.00 # 添字操作は高くつく
system.time(test2(X))
[1] 0.81 0.02 0.82 0.00 0.00
system.time(sum(X))
[1] 0.03 0.00 0.03 0.00 0.00 # もちろんこれは sum 関数を使えば済むこと
終了行:
SIZE(20){COLOR(magenta){Rコードの最適化例:ベクトルはベクトルとして操作する}} ~
[[Rコード最適化のコツと実例集]] に戻る~
* 添字を全く使わずにすます例
X <- matrix(runif(1000000), nc=1000, nr=1000)
test1 <- function (x) {
s <- 0
for (i in 1:dim(x)[1])
for (j in 1:dim(x)[2])
s <- s + x[i, j] # 添字による操作!
s
}
test2 <- function (x) {
s <- 0
for (e in x) s <- s + e # R の for ループ範囲はベクトル・行列でも可!
s # 順序が問題になる時は困る可能性
}
system.time(test1(X))
[1] 3.39 0.01 3.40 0.00 0.00 # 添字操作は高くつく
system.time(test2(X))
[1] 0.81 0.02 0.82 0.00 0.00
system.time(sum(X))
[1] 0.03 0.00 0.03 0.00 0.00 # もちろんこれは sum 関数を使えば済むこと
ページ名: