NumPyフィルターアレイ


配列のフィルタリング

既存の配列からいくつかの要素を取得し、それらから新しい配列を作成することをフィルタリングと呼びます。

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

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

インデックスの値がTrueその要素である場合、その要素はフィルター処理された配列に含まれ、そのインデックスの値が Falseその要素である場合、フィルター処理された配列から除外されます。

インデックス0と2の要素から配列を作成します。

import numpy as np

arr = np.array([41, 42, 43, 44])

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

上記の例は戻り[41, 43]ます、なぜですか?

新しいフィルターには、フィルター配列の値が含まれている値 True(この場合はインデックス0と2)のみが含まれているためです。


フィルタ配列の作成

True 上記の例では、との値をハードコーディングしましたFalseが、一般的な使用法は、条件に基づいてフィルター配列を作成することです。

42より大きい値のみを返すフィルター配列を作成します。

import numpy as np

arr = np.array([41, 42, 43, 44])

# Create an empty list
filter_arr = []

# go through each element in arr
for element in arr:
  # if the element is higher than 42, set the value to True, otherwise False:
  if element > 42:
    filter_arr.append(True)
  else:
    filter_arr.append(False)

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)


元の配列から偶数の要素のみを返すフィルター配列を作成します。

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

# Create an empty list
filter_arr = []

# go through each element in arr
for element in arr:
  # if the element is completely divisble by 2, set the value to True, otherwise False
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

配列から直接フィルターを作成する

上記の例はNumPyで非常に一般的なタスクであり、NumPyはそれに取り組むための優れた方法を提供します。

条件内の反復可能な変数の代わりに配列を直接置き換えることができ、期待どおりに機能します。

42より大きい値のみを返すフィルター配列を作成します。

import numpy as np

arr = np.array([41, 42, 43, 44])

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

元の配列から偶数の要素のみを返すフィルター配列を作成します。

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)