簡體   English   中英

R - 我怎樣才能使這個循環更快?

[英]R - How can I make this loop faster?

有什么方法可以讓 r 中的這個循環更快?

    V=array(NA, dim=c(nrow(pixDF), n))

    for(i in 1:n)
    {
       sdC<-sqrt(det(Cov[,i,]))
       iC<-inv(Cov[,i,])
       V[,i]<-apply(pixDF,1,function(x)(sdC*exp(-0.5*((x-Mean[i,])%*%iC%*%as.matrix((x-Mean[i,]))))))
    }

其中,在這種情況下, pixDF是一個包含 490000 行和 4 列的矩陣,其中填充了雙精度數。 n = Cov是一個 (4,5,4) 數組,其中填充了“雙精度”。 Mean是一個 (5,4) 數組,也填充了雙精度數。

這個循環在我的電腦上大約需要 30 分鍾。 (編輯前)。 現在需要1分鍾。

正如 Ronak 所指出的,如果沒有可重復的示例,就很難提供幫助。 但是,我認為可以避免apply 像這樣的東西可以工作:

V <- array(NA, dim = c(nrow(pixDF), n))
tpixDF <- t(pixDF)
for (i in 1:n) {
  x <- Cov[, i, ]
  sdC <- sqrt(det(x))
  iC <- solve(x)
  mi <- Mean[i, ]
  k <- t(tpixDF - mi)
  V[, i] <- sdC*exp(-0.5*rowSums(k %*% iC * k))
}

此外,正如 Roland 提到的那樣, inv可能是 equal solve

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM