Help us understand the problem. What is going on with this article?

Pythonのlistをslideしながらwindow幅で切り出す

More than 1 year has passed since last update.

タイトルが雑でごめんなさい。

以下のようにPythonのリストをslide幅でずらしながらwindow幅で切り出す方法です。
リストをwindow幅でslideずつずらす.png
機械学習などでよく使う割に忘れやすいのでメモしておきます。

実装

>>> 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)]

こんな便利な関数があったとは驚き。

以上。

NLPingu
筑波大学CSのD1です。研究分野は自然言語処理です。理研AIPでアンサンブルラーニングや知識構築、属性値抽出の研究をしています。森羅プロジェクト(http://urx.blue/XHQi )というWikipediaの構造化タスクの運営に携わっています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away