Tablica filtrów NumPy


Filtrowanie tablic

Uzyskiwanie niektórych elementów z istniejącej tablicy i tworzenie z nich nowej tablicy nazywa się filtrowaniem .

W NumPy filtrujesz tablicę za pomocą listy indeksów logicznych .

Lista indeksów logicznych to lista logicznych odpowiadających indeksom w tablicy.

Jeśli wartość pod indeksem oznacza True, że element jest zawarty w filtrowanej tablicy, jeśli wartość pod tym indeksem oznacza False, że element jest wykluczony z filtrowanej tablicy.

Przykład

Utwórz tablicę z elementów o indeksie 0 i 2:

import numpy as np

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

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

Powyższy przykład zwróci [41, 43], dlaczego?

Ponieważ nowy filtr zawiera tylko wartości, dla których tablica filtrów miała wartość True, w tym przypadku indeks 0 i 2.


Tworzenie tablicy filtrów

W powyższym przykładzie zakodowaliśmy wartości True i na Falsestałe, ale powszechnym zastosowaniem jest tworzenie tablicy filtrów na podstawie warunków.

Przykład

Utwórz tablicę filtrów, która zwróci tylko wartości większe niż 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)


Przykład

Utwórz tablicę filtrów, która zwróci tylko parzyste elementy z oryginalnej tablicy:

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)

Tworzenie filtra bezpośrednio z tablicy

Powyższy przykład jest dość powszechnym zadaniem w NumPy, a NumPy zapewnia dobry sposób na jego rozwiązanie.

Możemy bezpośrednio podstawić tablicę zamiast zmiennej iterowalnej w naszym warunku i będzie działać tak, jak tego oczekujemy.

Przykład

Utwórz tablicę filtrów, która zwróci tylko wartości większe niż 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)

Przykład

Utwórz tablicę filtrów, która zwróci tylko parzyste elementy z oryginalnej tablicy:

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)