我正在寻找随着窗口大小变化计算滚动总和的最快方法。我使用下面的代码,但是对于长度为 1M 的向量来说,它太慢了。
Thanks
set.seed(1)
n = 10L
x = runif(n)
window = pmin(sample(1:10, n, TRUE), n:1-1)
s = function(x, w){
n = length(x)
out = rep(NA, n)
for(i in 1:n){
k = w[i]
out[i] = sum(x[i:(i+k)])
}
out
}
s(x, window)
# [1] 2.11869372 1.85318505 4.87750614 3.61375247 3.39644499 3.19476306 2.29637338 1.35169811
# [9] 0.69090031 0.06178627
尝试这个:
en <- seq_along(x) + window # end positions
cum <- cumsum(x)
cum[en] - cum + x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)