我正在尝试优化以下代码。
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() 来解决问题?