NumPyはPythonで科学計算を行うための主要なライブラリであり、強力なN次元配列オブジェクトとその配列を操作するための多くの関数を提供します。NumPyでは、基本的なインデックスやスライシングに加えて、より柔軟かつ効率的にデータにアクセス・操作できる高度なインデックス機能が搭載されています。この記事では、整数によるインデックス、論理値によるインデックス、そしてnp.newaxisやnp.expand_dimsを使用した配列次元の拡張について詳しく説明します。
1. 整数によるインデックス
整数によるインデックス(Fancy Indexing)は、整数型の配列を使って任意の要素を選択し、指定された順序で返すことができます。
1.1 一維配列でのインデックス
一維配列では、整数型の配列を使用してインデックスを指定できます。これにより、新しい一維配列が生成され、選択された要素が含まれます。
import numpy as np
data = np.array([5, 10, 15, 20, 25])
selector = np.array([4, 2, 0])
output = data[selector]
print(output) # 出力: [25 15 5]
1.2 多次元配列でのインデックス
多次元配列では、複数の整数型配列を使用してインデックスを指定できます。これにより、一次元の結果配列が生成されます。
data = np.array([[1, 2], [3, 4], [5, 6]])
row_selector = np.array([0, 2])
col_selector = np.array([1, 0])
output = data[row_selector, col_selector]
print(output) # 出力: [2 5]
2. 論理値によるインデックス
論理値によるインデックスは、条件に基づいて要素を選択することができます。
2.1 一維配列での論理値インデックス
一維配列では、条件式から生成される論理値配列を使用してインデックスを指定できます。
data = np.array([5, 10, 15, 20, 25])
condition = data % 2 == 0
output = data[condition]
print(output) # 出力: [10 20]
2.2 多次元配列での論理値インデックス
多次元配列でも同様に、条件に基づいて要素を選択できます。ただし、結果は平坦化された一次元配列になります。
data = np.array([[1, 2], [3, 4], [5, 6]])
condition = data > 3
output = data[condition]
print(output) # 出力: [4 5 6]
3. 配列次元の拡張
特定の計算や操作のために、配列の次元を増やす必要がある場合があります。これにはnp.newaxisやnp.expand_dimsを使用します。
3.1 np.newaxisを使用した次元の追加
np.newaxisを使用することで、配列に新たな軸を挿入できます。
data = np.array([1, 2, 3, 4, 5])
output = data[:, np.newaxis]
print(output.shape) # 出力: (5, 1)
3.2 np.expand_dimsを使用した次元の追加
np.expand_dims関数は、指定された位置に新たな軸を挿入します。
data = np.array([1, 2, 3, 4, 5])
output = np.expand_dims(data, axis=0)
print(output.shape) # 出力: (1, 5)