いつも失念してしまう
R
のぎょうれつ演算.
ということで,
これまたいつものごとく例をつくって思いだしてみる.
> M <- sapply(1:3, function(i) c(i, i, i))
> M # 行列
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 3
[3,] 1 2 3
> v <- c(1, 2, 3) # ヴェクトル
> v * M # ヴェクトルの各要素を各行にかける
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 6
[3,] 3 6 9
> M * v # 上と同じ
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 4 6
[3,] 3 6 9
> t(v * t(M)) # 各列にかけたければ……
[,1] [,2] [,3]
[1,] 1 4 9
[2,] 1 4 9
[3,] 1 4 9
> M %*% v # 内積 (結果は行列に格納されている)
[,1]
[1,] 14
[2,] 14
[3,] 14
> v %*% M # v と列ヴェクトルの内積を並べたもの,というか
[,1] [,2] [,3]
[1,] 6 12 18
1800 どーにかこーにかできた.
試験運転.
> system.time(r <- randomization.tree("Am", d, ldm, n.trial = 1000))
[1] 160.63 0.01 160.64 0.00 0.00
345 個体の 1000 回試行で 160 秒か.
全樹種 100 回試行だと
……
> system.time(sapply(unique(d$Sp), function(spc) randomization.tree(spc, d, ldm, n.trial = 100)))
[1] 117.75 0.02 118.01 0.00 0.00
二分ぐらいか.
ということは 1000 回試行だと 20 分ぐらいだな.
これが 4 season で 1.33 時間の,
さらに host いれかえ randomization も必要だから
……
必要な予想合計計算時間は 3 時間弱,
ぐらいかな.
それほど高速化されてない.
せいぜい二倍ぐらいのもんか.
樹木いれかえよりさらにめんどくさい
「host いれかえ randomization」
を実行する関数かけた.
時刻は 1955.
試験運転すると
> system.time(sapply(unique(d$Sp), function(spc) randomization.host(spc, d, ldm, n.trial = 100)))
[1] 166.58 0.00 167.27 0.00 0.00
うーむ,
やはり試行回数は同じでもこちらのほうが時間かかってしまう.
データやりとりを削って overhead を軽くしてみる
(が,
ぢつは R 内部処理がどうなってるのか,
いまいちわからん).
> system.time(sapply(unique(d$Sp), function(spc) randomization.host(spc, d, ldm, n.trial = 100)))
[1] 153.01 0.06 153.82 0.00 0.00
……
ほんの少しだけ速くなったか.
うう.