NumPy Array Filtrering

Array filtrering

At tage nogle elementer fra en eksisterende array og oprette et nyt array kaldes filtrering (filtering).

I NumPy bruger vi en boolsk indeksliste til at filtrere arrayet.

En boolsk indeksliste er en liste over boolske værdier, der korresponderer til indekserne i arrayet.

Hvis værdien ved indekset er True, så vil elementet inkluderes i den filtrerede array; hvis værdien ved indekset er False, så vil elementet blive udeladt fra den filtrerede array.

Eksempel

Opret en array ved hjælp af elementerne på indekserne 0 og 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)

Kør Eksempel

Det foregående eksempel vil returnere [61, 63, 65]Hvorfor?

Fordi den nye filter indeholder kun værdier i filterarrayen True værdien, så i dette tilfælde er indekserne 0 og 2, 4.

oprettet en filterarray

I det foregående eksempel har vi True og False Værdien er hårdkoded, men den almindelige brug er at oprette en filterarray baseret på betingelser.

Eksempel

Opret en filterarray, der kun returnerer værdier, der er større end 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
# Opret en tom liste
filter_arr = []
# Gennemløb hver element i arr
for element in arr:
  # Hvis elementet er større end 62, sættes værdien til True, ellers til False:
  hvis element > 62:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Kør Eksempel

Eksempel

Opret en filterarray, der kun returnerer de tal fra den oprindelige array, der er lige:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
# Opret en tom liste
filter_arr = []
# Gennemløb hver element i arr
for element in arr:
  # Hvis elementet kan divides med 2 uden rest, sæt værdien til True, ellers sæt den til False
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Kør Eksempel

Opret filter direkte fra array

Det er et meget almindeligt opgave i NumPy, og NumPy tilbyder gode metoder til at løse dette problem.

Vi kan erstatte arrayet direkte i betingelsen i stedet for iterable variablen, og det vil fungere som forventet.

Eksempel

Opret en filterarray, der kun returnerer værdier, der er større end 62:

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)

Kør Eksempel

Eksempel

Opret en filterarray, der kun returnerer de tal fra den oprindelige array, der er lige:

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)

Kør Eksempel