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 True
tento 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)