numpy スライス
pythonのリストやnumpy配列でのスライスは i:j:n
の形式で行います。
ここでi
は開始インデックス、 j
は終了インデックスを表しており、
i以上でjより小さいインデックス(i <= n < j)でスライスされます。
次に n
ですが、これはステップ数を表しますが、ステップ数は1の時は省略してi:j
のみの記述をすることができます。
ですので質問にある 1:3
は1以上で3より小さいインデックス値 ー (1,2)にスライスされることになります。
また、i
やj
の値も省略することが可能です。i
が省略された場合は i = 0
が設定され、 jが省略された場合はj = (配列のサイズ)
が設定されます。
ですので5:
インデックス値 5から最後まででスライス:5
最初からインデックス値 4 まででスライス:
最初から最後まで(配列全体)でスライス
ということになります。
最後に、,
の説明ですが、numpyでの2次行列の場合 data[行の指定,列の指定]
の記述にて行列から一部をスライスすることができます。
data[:,1:3]
は
行は :
(行全体)を指定
列は 1:3
インデックス(1,2)を指定
となります。
>>> a = numpy.array([[0,1], [2, 3]])
>>> a
array([[0, 1],
[2, 3]])
>>> a[:,0]
array([0, 2])
>>>
[行:列]
でスライスでき、省略した場合はすべてを指定したことになるので、[:, 0]
は全ての行の0列目を取得することになります。省略せずに書くと2x2の配列の場合ならa[0:2, 0]
となります。