タイトルが雑でごめんなさい。
以下のようにPythonのリストをslide幅でずらしながらwindow幅で切り出す方法です。
機械学習などでよく使う割に忘れやすいのでメモしておきます。
実装
>>> s = 3 #slide
>>> w = 5 #window
>>> array = list(range(10))
>>> [array[i:i+w] for i in range(0,len(array)-w+s,s)]
[[0, 1, 2, 3, 4], [3, 4, 5, 6, 7], [6, 7, 8, 9]]
>>> array = list(range(11))
>>> [array[i:i+w] for i in range(0,len(array)-w+s,s)]
[[0, 1, 2, 3, 4], [3, 4, 5, 6, 7], [6, 7, 8, 9, 10]]
>>> array = list(range(12))
>>> [array[i:i+w] for i in range(0,len(array)-w+s,s)]
[[0, 1, 2, 3, 4], [3, 4, 5, 6, 7], [6, 7, 8, 9, 10], [9, 10, 11]]
more_itertools.windowedでも可能
(LouiS0616さんにコメントで教えていただきました。 ありがとうございます。)
pipでのインストールが必要。
pip install more_itertools
以下のように第二引数がwindow幅、stepがslide幅に対応している。
>>> import more_itertools
>>> array = list(range(12))
>>> list(more_itertools.windowed(array,5,step = 3))
[(0, 1, 2, 3, 4), (3, 4, 5, 6, 7), (6, 7, 8, 9, 10), (9, 10, 11, None, None)]
こんな便利な関数があったとは驚き。
以上。