NumPy Filter Array


Filtrační pole

Získání některých prvků z existujícího pole a vytvoření nového pole z nich se nazývá filtrování .

V NumPy filtrujete pole pomocí boolean index list .

Seznam booleovských indexů je seznam logických hodnot odpovídajících indexům v poli.

Pokud je hodnota na indexu, je Truetento prvek obsažen ve filtrovaném poli, pokud je hodnota na tomto indexu False, tento prvek je vyloučen z filtrovaného pole.

Příklad

Vytvořte pole z prvků na indexu 0 a 2:

import numpy as np

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

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

Výše uvedený příklad se vrátí [41, 43], proč?

Protože nový filtr obsahuje pouze hodnoty, kde pole filtrů mělo hodnotu True, v tomto případě index 0 a 2.


Vytvoření pole filtrů

Ve výše uvedeném příkladu jsme napevno zakódovali hodnoty True a False, ale běžné použití je vytvořit pole filtrů na základě podmínek.

Příklad

Vytvořte pole filtrů, které vrátí pouze hodnoty vyšší než 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)


Příklad

Vytvořte pole filtrů, které vrátí pouze sudé prvky z původního pole:

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)

Vytváření filtru přímo z pole

Výše uvedený příklad je docela běžný úkol v NumPy a NumPy poskytuje pěkný způsob, jak se s ním vypořádat.

Můžeme přímo nahradit pole místo iterovatelné proměnné v naší podmínce a bude to fungovat tak, jak očekáváme.

Příklad

Vytvořte pole filtrů, které vrátí pouze hodnoty vyšší než 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)

Příklad

Vytvořte pole filtrů, které vrátí pouze sudé prvky z původního pole:

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)