次のコードを最適化しようとしています。
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()を構築する方法はありますか?