我有一个数组
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
我有一个数组
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
这可能是你所追求的:
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
我不能授予速度,但它会达到你所需要的
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