インデックスとは配列に対して[]で要素を抜き出す方法である。
マニュアルは以下になる。
インデックスの方法としては以下がある。
- 整数値を使ったインデックス
- スライスを使ったインデックス
- 配列を使ったインデックス
- ブーリアンインデックス
整数値を使ったインデックス
[N]のように[と]の間に整数値Nを指定したインデックスである。例えば一次元の配列であればこれはN番目の要素を抜き出す。
要素を一つだけ抜き出す最も基本的となるインデックス操作をしてみる。
import numpy as np x = np.arange(10) print(x) # [0 1 2 3 4 5 6 7 8 9]
print(x[0]) # 0 print(x[3]) # 3
またマイナスの値を指定すると、右端からのインデックスとなる。
print(x[-2]) # 8
numpy.ndarrayでは多次元配列に対してもインデックスを実行できる。
x.shape = (2,5) print(x) #[[0 1 2 3 4] [5 6 7 8 9]] print(x[1]) # [5 6 7 8 9] print(x[1,2]) # 7 print(x[1][2]) # 7
スライスを使ったインデックス
スライスは3つのフォーマットがある。
- i:j:k ー iは開始位置、jは終了位置、kはステップ
- i:j - iは開始位置、jは終了位置, ステップは1となる
- i: - iは開始位置、終了位置は配列の最後の位置、ステップは1となる
- :j - 開始位置は配列の開始位置、jは終了位置、ステップは1
import numpy as np x = np.arange(10) # [0 1 2 3 4 5 6 7 8 9] print(x[1:5:2]) # [1 3] print(x[2:6]) # [2 3 4 5] print(x[3:]) # [3 4 5 6 7 8 9] print(x[:7]) # [0 1 2 3 4 5 6]
配列を使ったインデックス
インデックスには配列を指定することもできる。便利である反面、コードが読みにくくなる可能性がある。複雑になりすぎるようなら別の方法を試すほうが良い。
- インデックスに使う配列はint型であること
- インデックスにより戻される配列は本体である、つまり書き換えができる。
import numpy as np x = np.arange(0,20,2) print(x) # [ 0 2 4 6 8 10 12 14 16 18] print(x[np.array([3,3,8,2,9])]) # [ 6 6 16 4 18]
ブーリアン型インデックス
ブーリアン型インデックスは対象となる配列と同じ形状(shape)を持つ配列であり要素はTrueもしくはFalseのBoolean型である。要素に紐づくインデックスがTrueの場合のみ値が戻される。整数値、スライス、配列を使ったインデックスとは異なり柔軟に要素を抜き出すことができる。
b=x>6 print(b) # [False False False False True True True True True True] print(x[b]) [ 8 10 12 14 16 18] print(x[np.array([True, False, True, False, True, True, False, True, False, True])]) # [ 0 4 8 10 14 18]