Booleaanse maskers en fancy indexing
Filter arrays met booleaanse voorwaarden en selecteer willekeurige elementen met integer-indexarrays.
Booleaanse maskers en fancy indexing is een gratis Pandas & NumPy Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Pandas & NumPy Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.
Booleaanse arrays als maskers
Een booleaans masker is een array met True- en False-waarden. Gebruik het als index en je houdt alleen de elementen over die met True zijn gemarkeerd — je belangrijkste hulpmiddel voor filteren.
import numpy as np
a = np.array([5, 3, 8, 1, 9, 2, 7])
mask = a > 4
print(mask) # [ True False True False True False True]
print(a[mask]) # [5 8 9 7]Samengestelde booleaanse voorwaarden
Maak samengestelde filters met & (en), | (of) en ~ (niet). Zet elke voorwaarde altijd tussen haakjes, anders kan de prioriteitsvolgorde je op het verkeerde been zetten.
import numpy as np
a = np.array([3, 7, 2, 9, 1, 6, 4, 8])
# Elements between 4 and 8 inclusive
result = a[(a >= 4) & (a <= 8)]
print(result) # [7 6 4 8]
# Elements less than 3 or greater than 7
result2 = a[(a < 3) | (a > 7)]
print(result2) # [2 9 1 8]Waarden aanpassen met booleaanse indexering
Je kunt rechtstreeks toewijzen aan een booleaanse selectie, zodat alleen de overeenkomende elementen ter plaatse worden gewijzigd. Dit is de snelste manier om uitschieters af te kappen of ontbrekende waarden op te vullen.
import numpy as np
a = np.array([5, -3, 8, -1, 2, -7])
a[a < 0] = 0 # zero out negatives in-place
print(a) # [5 0 8 0 2 0]
# Cap values above 6
a[a > 6] = 6
print(a) # [5 0 6 0 2 0]Booleaanse maskers op 2D-arrays
Een booleaans masker op een 2D-array geeft altijd een afgevlakt 1D-resultaat terug. Als je volledige rijen wilt selecteren, maak je een 1D-masker op basis van één kolom en indexeer je langs axis 0.
import numpy as np
m = np.array([[1, 5], [3, 2], [8, 4], [6, 7]])
# Select rows where first column > 4
mask = m[:, 0] > 4
print(mask) # [False False True True]
print(m[mask]) # [[8 4] [6 7]]np.where met maskers
np.where(condition, x, y) behoudt de vorm van de array: het kiest x waar aan de voorwaarde wordt voldaan en y op de overige plaatsen. Ideaal om waarden te vervangen zonder de array af te vlakken.
import numpy as np
a = np.array([3, -1, 5, -2, 4])
result = np.where(a >= 0, a, 0) # keep positives, replace negatives
print(result) # [3 0 5 0 4]
# Recode: above-average -> 'high', else -> 'low'
labels = np.where(a >= a.mean(), 'high', 'low')
print(labels) # ['high' 'low' 'high' 'low' 'high']De basis van geavanceerde indexering
Geavanceerde indexering betekent dat je een array met gehele indexen doorgeeft om specifieke elementen op te halen — in elke gewenste volgorde en met herhalingen. Het resultaat is altijd een kopie.
import numpy as np
a = np.array([10, 20, 30, 40, 50])
idx = np.array([4, 1, 1, 3])
print(a[idx]) # [50 20 20 40]
# 2D index shape -> 2D output
idx2d = np.array([[0, 2], [4, 1]])
print(a[idx2d]) # [[10 30] [50 20]]Geavanceerde indexering op 2D-arrays
Op een 2D-array selecteren bij elkaar horende indexarrays verspreide punten: m[rows, cols] haalt het element op elke combinatie van (rij, kolom) op, niet een volledige submatrix.
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Select elements at (0,2), (1,0), (2,1)
rows = [0, 1, 2]
cols = [2, 0, 1]
print(m[rows, cols]) # [3 4 8]np.ix_ voor selectie van een raster van rijen en kolommen
np.ix_ selecteert een submatrix voor elke combinatie van de rijen en kolommen die je opgeeft — handig wanneer je veel rijen én veel kolommen wilt, en niet alleen losse combinaties.
import numpy as np
m = np.arange(16).reshape(4, 4)
print(m)
# Select rows 0,2 and columns 1,3
ix = np.ix_([0, 2], [1, 3])
print(m[ix])
# [[ 1 3]
# [ 9 11]]np.nonzero() en np.argwhere()
np.nonzero geeft de indexen van niet-nulle (of True-)elementen terug als een tuple per as. np.argwhere geeft dezelfde informatie terug als op elkaar gestapelde, eenvoudig leesbare rijen.
import numpy as np
a = np.array([0, 3, 0, 5, 0, 7])
print(np.nonzero(a)) # (array([1, 3, 5]),)
print(np.argwhere(a > 0)) # [[1] [3] [5]]Booleaanse en geavanceerde indexering combineren
Combineer beide: gebruik een booleaans masker om rijen te filteren en vervolgens geavanceerde indexering om kolommen te herschikken. Samen filteren en herschikken ze gegevens in één overzichtelijke stap.
import numpy as np
data = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
scores = np.array([0.9, 0.3, 0.8])
# Keep high-scoring rows, reorder columns to [2, 0, 1]
high = data[scores > 0.5]
reordered = high[:, [2, 0, 1]]
print(reordered)Prestaties: booleaanse versus geavanceerde indexering
Zowel booleaanse als geavanceerde indexering geven kopieën terug. Voor filteren is een booleaans masker meestal het duidelijkst en ruim snel genoeg — een uitstekende standaardkeuze.
import numpy as np
a = np.random.rand(1_000_000)
# Boolean mask -- readable and fast
result = a[a > 0.5]
print('filtered size:', result.size) # ~500000
# Equivalent with np.where + fancy index
idx = np.where(a > 0.5)[0]
result2 = a[idx]
print('same result:', np.array_equal(result, result2))Korte controle
Test je begrip van booleaanse maskers en geavanceerde indexering uit deze les.
Samenvatting van de les
Goed gedaan! Booleaanse maskers filteren en kopiëren, np.where behoudt de vorm van de array en geavanceerde indexering haalt alle elementen op die je opgeeft. Hierna: Pandas Series!
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Booleaanse maskers en fancy indexing” gratis?
Ja — de volledige tekst van “Booleaanse maskers en fancy indexing” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Pandas & NumPy Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Pandas & NumPy Academy bevat in totaal 4 lessen.
Wat leer ik in “Booleaanse maskers en fancy indexing”?
Filter arrays met booleaanse voorwaarden en selecteer willekeurige elementen met integer-indexarrays. Je oefent met Pandas & NumPy Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Pandas & NumPy Academy te beginnen?
Ervaring vooraf is niet nodig. Pandas & NumPy Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Booleaanse maskers en fancy indexing”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Pandas & NumPy Academy?
Ja. Elke les over Pandas & NumPy Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Universele functies (ufuncs)
- Aggregatiefuncties
- Broadcastingregels
- Booleaanse maskers en fancy indexing