簡體   English   中英

不同窗口大小的滾動總和

[英]Rolling sum with varying window sizes

我正在尋找隨着窗口大小變化而計算滾動總和的最快方法。 我使用以下代碼,但是對於長度為1M的向量,它太慢了。

謝謝

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

暫無
暫無

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

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