저는 벡터화와 R에서 루프 속도를 높이기 위해 어떻게 적용 할 수 있는지 알고 있습니다 만, 각 반복이 이전 반복의 결과에 의존하는 벡터를 사용하여 코드 속도를 높이는 방법을 찾지 못했습니다. 반복적 인 랜덤 간격 계산에 의존한다. 예를 들어R에 대한 결과 종속적 인 루프 최적화
:
Josh-- 미안.
m <- c(1, 1)
w.r <- c(0.33592935393, 0.63825353030, 0.15335253356)
및 rlistl 3 × 2 행렬의 목록입니다 : 그래서, 여기에 자세한 내용입니다. 그래서 대화를 위해,
r0 <- matrix(0, 2, 2)
r1 <- matrix(1, 2, 2)
r2 <- matrix(2, 2, 2)
rlist <- list(r0, r1, r2)
N <- 500
E <- matrix(0, N, 2)
for(i in 1:N) {
r <- c(c(1:3) %*% rmultinom(1, 1, w.r))
E[i, ] <- mvrnorm(1, m, rlist[[r]])
}
위해 나는 복용 해봤 - 루프 밖에서 "R < multinom()"calcuation을하고 rprof은 소요되는 시간의 대부분은, 분명히, mvnorm에 보여줍니다. 벡터를 사용하여 속도를 빠르게하는 방법을 알아낼 수 있습니까?
는 여기에 또 다른 예를
for(i in 1:N) {
if(d$V[i, 1] & d$V[i, 2]) QQ <- 1
else if(! d$V[i, 1] & d$V[i, 2]) QQ <- 2
else if(! d$V[i, 1] & ! d$V[i, 2]) QQ <- 3
else if(d$V[i, 1] & ! d$V[i, 2]) QQ <- 4
U[i, ] <- r1bvtruncnorm(mux=mu.U[i, ]/sd.r[r1], rho=rho, q=QQ)
에게}의
그 어떤 빠르게 실행하는 방법을 알아낼 수 없습니다. 내 문제의 일부는 내가 C/C++ 프로그래머이지만, R을 읽고 너무 쉽게 뭔가를 놓치지 않으려 고 노력하고있다.
감사합니다.
편집 :
저스틴 :
OK--
그래서 난 당신의 제안을했지만, 내가 두려워으로, 담당자가() 나는 기대했다처럼 행동하지 않습니다. 난 매번 별도의 난수가 필요하지만 rep()를 사용하면 rmultinom을 한 번 호출하고 그 결과를 100 번 복제합니다.>rep(c(c(1:3) %*% rmultinom(1, 1, ww.r)), 100)
[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[38] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
> rep(c(c(1:3) %*% rmultinom(1, 1, ww.r)), 100)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
'첫 번째 코드 블록 wr' 무엇 :
또는 하나의 지저분한 라인에
? 그대로서도 재현 할 수 없으며 상자에서도 실행되는 코드를 제공하면 더 나은 응답을 얻을 수 있습니다! –조쉬 - 죄송합니다. 그래서, 여기에 더욱 상세히이다 : m <- C (1, 1) w.r <- C (0.252201578098282, 0.585225059235736, 0.162573362665982) rlistl 및 3 × 2 행렬들의 목록이다. (2, 2, 2) r0 <- 행렬 (0, 2, 2) r1 <- 행렬 (1,2,2) r2 <- 행렬 (2,2,2) rlist <- 목록 (r0, r1, r2) – HodorTheCoder