我想優化下面的代碼。自定義累積和與衰減因子
dim <- c(10000,100)
m <- matrix(sample(0:10, prod(dim), replace = TRUE), nrow = dim[1], ncol = dim[2])
system.time({
output <- matrix(0, nrow = dim[1], ncol = dim[2])
for (i in 1:dim[1]){
output[i,1] <- m[i,1]
for (j in 2:dim[2]){
output[i,j] <- output[i, j-1] * 0.5 + m[i,j]
}
}
})
概念上講,它是非常類似於一個簡單的累計總和:
system.time({
output <- matrix(0, nrow = dim[1], ncol = dim[2])
for (i in 1:dim[1]){
output[i,] <- cumsum(m[i,])
}
})
的問題是,代碼的第一部分爲約100倍慢。有沒有辦法建立一個定製版本的cumsum()來實現這個功能?
忽略矩陣的時刻,只集中在第i行,我將其命名爲矢量'rowi',我認爲'mtail < - rowi * 2 ^( - 1 * (0:length(rowi)))'會產生這樣的值,使得'outputi <-cumsum(mtail)'是你想要的。如果沒有人打敗我,我會盡力試驗一個測試案例。 – 2013-02-11 15:15:23