配列の要素には[]
を使ってアクセスできる。
>>> x = np.arange(0, 20, 2, dtype=np.int32)
>>> x
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
>>>
>>> x[3]
6
インデックスを負にすると(要素数 + 負のインデックス値)にアクセスする。
>>> x[-1]
18
>>> x[-3]
14
listを使って複数の要素にアクセスすることができる。
>>> x[[5, 0, 2]]
array([10, 0, 4])
多次元配列の場合、[i0, i1, ...], [j0, j1, ...]
を指定すると(i0, j0), (i1, j1), ...を座標とする要素を取得できる。
>>> x = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
>>> x
array([[ 1., 2., 3.],
[ 4., 5., 6.]], dtype=float32)
>>> x[[0, 1], [1, 0]]
array([ 2., 4.], dtype=float32)
またインデックスのtupleを渡すこともできる。
>>> x[[(0, 1), (1, 0)]]
array([ 2., 4.], dtype=float32)
[(開始位置):(終了位置):(間隔)]
で、指定した範囲の要素にアクセスできる。(間隔)は省略できる。(開始位置)を指定しない場合には0となり、(終了位置)を指定しない場合には末尾となる。
>>> x = np.arange(10, dtype=np.int32)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
>>> x[2:6]
array([2, 3, 4, 5])
>>> x[2:6:2]
array([2, 4])
>>> x[7:]
array([7, 8, 9])
>>> x[:3]
array([0, 1, 2])
>>> x[:]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
(開始位置)、(終了位置)に負の値を指定すると(要素数 + 負のインデックス値)を意味する。
>>> x[-2:]
array([8, 9])
>>> x[:-4]
array([0, 1, 2, 3, 4, 5])
(間隔)を負の値にするとインデックの大きいほうから小さいほうへの順序になる。
>>> x[5:2:-1]
array([5, 4, 3])
>>> x[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
以下のように正の値と負の値を混在させることもできるがわかりにくくなるのでやめたほうが良い。
>>> x[-7:8]
array([3, 4, 5, 6, 7])
以下のように比較演算子を使うと条件を満たす位置がTrue
、それ以外はFalse
となる配列を得られる。
>>> x = np.arange(10, dtype=np.int32)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x > 5
array([False, False, False, False, False, False, True, True, True, True], dtype=bool)
これを利用して条件を満たす要素にアクセスしたり、条件を満たす箇所だけ変更したりすることができる。
>>> x[x > 5]
array([6, 7, 8, 9])
>>> x[x > 5] = 0
>>> x
array([0, 1, 2, 3, 4, 5, 0, 0, 0, 0])