可变增量滑动窗口 - Python
我正在尝试在Python中使用滑动窗口功能来比较一个非常长的数值列表。我找到的滑动窗口函数的代码如下:
from itertools import islice
idlist = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list = []
def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
for i in window(idlist, n=2):
list.append(i)
print list
我的问题是,我该如何修改这段代码,以便我可以将窗口的移动增量(每次生成元组后窗口移动的数量)从1改为更大的整数,比如5或50?我知道如何改变窗口的大小,但不知道如何改变增量。谢谢!
3 个回答
0
也许这样可以解决问题
L=[1,2,3,4,5]
def window(L, n=2, jump=1):
lenght = len(L)
assert n <= lenght
for i in range(0,lenght-n+1,jump):
yield tuple(L[i:i+n])
A=[]
for i in window(L, n=3, jump=1):
A.append(i)
print A
0
提示:可以使用 next
函数来获取迭代器中的下一个元素。你需要在每次循环中获取并添加多个元素(我想这就是难点所在;你肯定知道怎么让窗口的另一端向前移动不同的量 :))。
1
你不需要改变增加的方式,你可以每隔 n 个元素取一个:
# taking every 3rd element moves the start by 3
print list(islice(window(idlist, n=2),None,None,3))
虽然没有完全优化,但很简单。