-Numpy- 要素へのアクセス

配列の各要素へのアクセスは,リストの場合と同様にインデックスを利用します.1次元配列の場合は,以下のように[ ] 内にインデックスを指定することで要素を取り出すことが可能です.

>>> import numpy as np
>>> a = np.array([0, 1, 2, 3, 4, 5])
>>> print(a[2])
2
>>> 


上記の例の場合は,先頭から0, 1, 2, ... とインデックスをつけた場合のインデックスが 2 の要素を取り出しています.

リストの場合と同様に,インデックスを指定して要素を入れ替えることが可能です.

>>> a[2] = 9
>>> print(a)
[0 1 9 3 4 5]
>>> 
この例では,インデックスが 2 の要素を 9 に置き換えています.
 
2次元配列の場合,要素を取り出す際にはインデックスを縦横で2つ指定します(カンマ区切りでインデックスを並べることも,インデックスを入れた [ ] を2つ並べることもできます).
>>> b = np.array([[0, 1, 2], 
...               [3, 4, 5]])
>>> print(b[1, 2])
5
>>> 
上記の例では,縦のインデックスが 1,横のインデックスが 2 の要素を取り出しています.
 
要素を入れ替える際にも,同様にインデックスを2つ指定します.
>>> b[1, 2] = 9
>>> print(b)
[[0 1 2]
 [3 4 9]]
>>> 
 
3次元配列の場合も同様に,インデックスを複数指定することで要素にアクセスすることが可能です.
 
指定するインデックスの数が配列の次元の数より少ない場合,配列の一部にアクセスします.
>>> c = np.array([[0, 1, 2], 
...               [3, 4, 5], 
...               [6, 7, 8]])
>>> print(c[1])
[3 4 5]
>>> 
上記の例では,2次元配列であるにも関わらず,インデックスを1つしか指定していないので,この場合は,最初の次元のインデックスが 1 の要素が配列として取り出されます.
 
同じようにインデックスを指定して,要素を指定した配列で置き換えることもできます.
>>> c[1] = np.array([9, 10, 11])
>>> print(c)
[[ 0  1  2]
 [ 9 10 11]
 [ 6  7  8]]
>>> 
 
[ ] 内に条件を記述すると,条件を満たす要素のみ取り出すことが可能です.
>>> d = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> print(d[d%2 == 0])
[0 2 4 6 8]
>>> 
上記の例では,2で割った余りが 0 の要素,すなわち偶数のみを取り出しています.
 
インデックスに配列を用いることも可能です.この場合は,複数の要素にまとめてアクセスすることができます.
>>> e = np.zeros*1
>>> f = np.array([8, 9])
>>> 
>>> e[np.array([0, 2]), np.array([0, 1])] = f
>>> 
>>> print(e)
[[8. 0. 0.]
 [0. 0. 0.]
 [0. 9. 0.]]
>>> 
上記のような記法で,0行0列の要素に8を,2行1列の要素に9を入れ替えることができることに注意が必要です.
 
 

*1:3, 3