NumPy 配列のフィルタリング

配列フィルタリング

既存の配列から一部の要素を取り出して新しい配列を作成することをフィルタリング(filtering)と呼びます。

NumPyでは、ブールインデックスリストを使用して配列をフィルタリングします。

ブールインデックスリストは、配列のインデックスに対応するブール値のリストです。

インデックスの値が Trueその場合、その要素はフィルターアrrayに含まれます;インデックスの値が Falseその場合、その要素はフィルターアrrayから除外されます。

インスタンス

インデックス0と2、4の要素を使用して配列を作成します:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr)

実行例

上記の例では、 [61, 63, 65]なぜか?

新しいフィルターアrrayには、フィルターアrrayに値がある部分のみが含まれています。 True の値を生成するために、この場合、インデックス0と2、4です。

フィルターアrrayの

上記の例では、 True および False 値はハードコードされていますが、通常の用途は条件に基づいてフィルターアrrayを作成することです。

インスタンス

62より大きな値のみを返すフィルターアrrayを作成します:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
# 空のリストを作成
filter_arr = []
# arrの各要素を巡回
for element in arr:
  # もし要素が62より大きい場合、値をTrueに設定します。それ以外の場合はFalseに設定します:
  if element > 62:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

実行例

インスタンス

フィルターアrrayを作成します。このarrayは元のarrayの偶数要素のみを返します:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
# 空のリストを作成
filter_arr = []
# arrの各要素を巡回
for element in arr:
  # 要素が2で割り切れる場合、値をTrueに、そうでない場合Falseに設定します
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

実行例

直接arrayからフィルターアrrayを作成

この例はNumPyで非常に一般的なタスクであり、NumPyはこの問題を解決するための良い方法を提供しています。

条件の中で直接arrayをiterable変数の代わりに使用することで、期待通りに動作します。

インスタンス

62より大きな値のみを返すフィルターアrrayを作成します:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
filter_arr = arr > 62
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

実行例

インスタンス

フィルターアrrayを作成します。このarrayは元のarrayの偶数要素のみを返します:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
filter_arr = arr % 2 == 0
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

実行例