0

我有一个数组

arr = [1,2,3, ..., N]

和一个窗口列表(长度为 N)

windows = [2,2,1, ...]

arr是否可以对存储的时变窗口进行滚动和计算windows

例如,在 t=3 时,您有arr=[1,2,3]window=1因此这表示返回 1 天的滚动总和,这样out[2] = 3

t=2,你有arr = [1,2]并且 window=2 所以这将表示一个 2 天的滚动总和,这样out[1]=3

4

2 回答 2

0

这可能是你所追求的:

arr = [1,2,3]

windows = [2,2,1]

out = [0,0,0]

for t, i in enumerate(windows):
    newarr = arr[:t+1]
    out[t] = sum(newarr[:-(i+1):-1])

    print('t = ' + str(t+1))
    print('arr = ' + str(newarr))
    print('out[' + str(t) + '] = ' + str(out[t]))
    print('\n')

给出:

t = 1
arr = [1]
out[0] = 1


t = 2
arr = [1, 2]
out[1] = 3


t = 3
arr = [1, 2, 3]
out[2] = 3
于 2018-03-07T20:49:54.800 回答
0

我不能授予速度,但它会达到你所需要的

df['New']=np.clip(df.index-df.windows+1,a_min=0,a_max=None)
df
Out[626]: 
   val  windows  New
0    1        2    0
1    2        2    0
2    3        1    2
3    4        1    3
4    5        3    2

df.apply(lambda x : df.iloc[x['New']:x.name+1,0].sum(),1)
Out[630]: 
0     1
1     3
2     3
3     4
4    12
dtype: int64
于 2018-03-07T20:38:42.933 回答