Python Numpy配列、リスト、タプルをスライスする

データで、ある部分のデータを取得したいと考えることはあるかと思います。

本記事では、Numpy配列、リスト、タプルの部分的にデータを取得する、所謂スライスの方法を紹介します。

インデックス

インデックスとは、同種の複数のものが並んでいるときに、個々の要素を区別するために付けられた通し番号などの識別情報であり、配列の要素を指し示す添字などが該当します。

このインデックスを指定してあげることで、あるデータだけを取得することができます。

スライス

スライスとは、要素の範囲を指定して複数取得できるものです。

インデックスの通し番号を開始と終了を設定することで、その間に含まれるデータを取り出します。

ただし、

Numpy配列の場合

データサンプルの準備。今回、2次元のデータを準備しました。

import numpy as np

data = np.array([[1,2,3],[4,5,6],[7,8,9]])

'''
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
'''

インデックス

例:レコード数0、カラム数0を取得

data[0,0]

1

スライス

例:レコード数0から2、カラム数1以降の全て

このとき、レコード数の2は含まれないことに注意しましょう。

data[0:2,1:]

array([[2, 3],
       [5, 6]])

リストの場合

データサンプルの準備。今回、2次元のデータを準備しました。

data = [[1,2,3],[4,5,6],[7,8,9]]

インデックス

例:レコード数0、カラム数0を取得

data[0][0]

1

スライス

例:レコード数0から2、カラム数1以降の全て

リストの場合は、リスト内包表記で取得することができます。

このとき、レコード数の2は含まれないことに注意しましょう。

[v[1:] for v in data[0:2]]

[[2,3],[5,6]]

タプルの場合

実は、タプルのインデックスとスライスは、リストでの方法と同じになります。

まとめ

以上を表でまとめます。

dataというデータがあったとすると

インデックススライス
Numpy配列data[番号,番号]data[番号,番号] *適宜:(コロン)を用いる
リスト&タプルdata[番号][番号][v[番号]for v in data[番号]] *適宜:(コロン)を用いる