NumPy で行列を操作する

このページでは、NumPy を用いて、行列の要素へのアクセスや部分抽出を行う方法などについて紹介します。

配列の要素にアクセスする

他の言語と同じように添字(そえじ)を利用して値を取得できます。

サンプルコード

# 2 x 3 行列を作成
x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)

# 特定の要素の値を取得
print x[1, 2]
print x[1][2]

# 0 行目のみを取得
print x[0]

# 1 行目のみを取得
print x[1]

実行結果

>>> x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)

>>> print x[1,2]
6

>>> print x[1][2]
6

>>> print x[0]
[1 2 3]

>>> print x[1]
[4 5 6]

行列 (配列) の要素にアクセスする (インデックスを利用)

a[i:j] のように、: (コロン) で区切り、i 番目の要素 (開始地点) から j 番目の要素 (終了地点) までを切り出して新たな配列を作成できます。

サンプルコード

# 1 次元配列を作成
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 2 番目の要素から 7 番目の要素までを取得
print x[2:7]

実行結果

>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> print x[2:7]
[2 3 4 5 6]

a[-N:M] のように、負の数 (マイナス) を使って、配列の後ろから数えて N 番目の要素の値、といった具合で指定することもできます。

サンプルコード

# 後ろから 2 番目の要素から、前から 10 番目の要素までを取得。
print x[-2:10]

実行結果

>>> print x[-2:10]
[8 9]

行列 (配列) の要素にアクセスする (数件飛ばしで取得する)

a[i:j:k] のように、2 つの : (コロン) で区切り、i 番目の要素(開始地点)から j 番目の要素(終了地点)まで、k-1 つスキップしながら取得し、新たな配列を作成できます。

サンプルコード

# 1 番目の要素から 7 番目の要素まで、1 つスキップしながら取得
print x[1:7:2]

# 1 番目の要素から 7 番目の要素まで、2 つスキップしながら取得
print x[1:7:3]

実行結果

>>> print x[1:7:2]
[1 3 5]

>>> print x[1:7:3]
[1 4]

行列 (配列) の要素にアクセスする (末尾から指定)

a[i:] のように、: (コロン) で区切ると、i 番目の要素から最後までの要素を全て抽出します。

# 5 番目の要素から最後の要素までを抽出
print x[5:]

実行結果

>>> print x[5:]
[5 6 7 8 9]

参考・出典:Indexing — NumPy v1.10 Manual