Rコードの最適化例:ベクトルはベクトルとして操作する
の編集
http://www.okadajp.org/RWiki/?R%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9C%80%E9%81%A9%E5%8C%96%E4%BE%8B%EF%BC%9A%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AF%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
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 関数を使えば済むこと
テキスト整形のルールを表示する