[問題] 加速模擬時的矩陣相乘
我有一個模型Y = BF
其中B是N x M, F是M x T的矩陣
我要透過模擬F的變化10000次再組合回去得到模擬的Y
但速度非常慢
我現在的作法是
# data
M = 3
N = 500
T = 100
nSim = 10000
B = matrix(rnorm(N * M), nrow = N)
F = matrix(rnorm(M * T), nrow = M)
sigma = abs(rnorm(M))
Z = array(0, dim = c(M, nSim, N, T)) # preallocate
for (m in 1:M) {
eps = rnorm(nSim * T, 0, sigma[m]) #generate random normal
dim(eps) = c(nSim, T) # 變成 10000 x T
Fsim = F[m, ] + eps
for (n.path in 1:nSim) {
Z[m,n.path,,] = as.matrix(B[,m]) %*% Fsim[n.path,]
}
}
result = apply(Z, c(2,3,4), sum)
其中第一步allocation就要大概3秒 (on macbook air 2013 mid)
產生亂數的時間好像還在預期中
但是裡面這個for (npath in 1:10000) {...}的時間實在太久了
我知道我現在的作法應該是最慢的
想請教版上的各位大大有什麼方法可以提升速度呢?
謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.163.241
※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1404714852.A.D01.html
→
07/07 18:40, , 1F
07/07 18:40, 1F
→
07/07 18:40, , 2F
07/07 18:40, 2F
→
07/07 18:41, , 3F
07/07 18:41, 3F
→
07/07 18:42, , 4F
07/07 18:42, 4F
※ 編輯: kolun (123.195.163.241), 07/07/2014 18:58:29
→
07/07 19:17, , 5F
07/07 19:17, 5F
→
07/07 19:18, , 6F
07/07 19:18, 6F
→
07/07 19:55, , 7F
07/07 19:55, 7F
→
07/07 22:57, , 8F
07/07 22:57, 8F
→
07/07 22:58, , 9F
07/07 22:58, 9F
→
07/07 22:59, , 10F
07/07 22:59, 10F
→
07/08 03:45, , 11F
07/08 03:45, 11F
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章