Maskowanie boolowskie i zaawansowane indeksowanie
Filtrować tablice za pomocą warunków boolowskich i wybierać dowolne elementy przy użyciu tablic indeksów całkowitych
Maskowanie boolowskie i zaawansowane indeksowanie to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Tablice boolowskie jako maski
Maska boolowska to tablica wartości True/False. Użyj jej jako indeksu, aby zachować tylko elementy oznaczone wartością True — to podstawowe narzędzie filtrowania.
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]Złożone warunki boolowskie
Twórz złożone filtry za pomocą & (i), | (lub) oraz ~ (nie). Zawsze ujmuj każdy warunek w nawiasy, w przeciwnym razie kolejność operatorów może spowodować problemy.
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]Modyfikowanie wartości za pomocą indeksowania boolowskiego
Możesz przypisać wartość bezpośrednio do wyboru boolowskiego, zmieniając w miejscu tylko pasujące elementy. To najszybszy sposób na ograniczenie wartości odstających lub uzupełnienie brakujących wartości.
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]Maskowanie boolowskie tablic 2-wymiarowych
Maska boolowska zastosowana do tablicy 2-wymiarowej zawsze zwraca spłaszczony wynik 1-wymiarowy. Aby wybrać całe wiersze, utwórz maskę 1-wymiarową na podstawie jednej kolumny i indeksuj wzdłuż osi 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 z maskami
np.where(condition, x, y) zachowuje kształt tablicy: wybiera x tam, gdzie warunek jest spełniony, a w pozostałych miejscach y. To idealne rozwiązanie do zamiany wartości bez spłaszczania tablicy.
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']Podstawy zaawansowanego indeksowania
Zaawansowane indeksowanie polega na przekazaniu tablicy indeksów całkowitoliczbowych w celu wybrania konkretnych elementów — w dowolnej kolejności i z powtórzeniami. Zawsze zwraca kopię.
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]]Zaawansowane indeksowanie tablic 2-wymiarowych
W tablicy 2-wymiarowej pary tablic indeksów wybierają rozproszone punkty: m[rows, cols] pobiera element z każdej pary (wiersz, kolumna), a nie całą podmacierz.
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_ do wyboru siatki wierszy i kolumn
np.ix_ wybiera podmacierz dla każdej kombinacji wskazanych wierszy i kolumn — przydatne, gdy chcesz wybrać wiele wierszy ORAZ wiele kolumn, a nie tylko pary.
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() i np.argwhere()
np.nonzero zwraca indeksy elementów niezerowych (lub mających wartość True) jako krotkę dla każdej osi. np.argwhere zwraca te same informacje ułożone w łatwych do odczytania wierszach.
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]]Łączenie indeksowania boolowskiego i zaawansowanego
Połącz oba podejścia: użyj maski boolowskiej do odfiltrowania wierszy, a następnie zaawansowanego indeksowania do zmiany kolejności kolumn. Razem pozwalają w jednym przejrzystym kroku filtrować i porządkować dane.
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)Wydajność: indeksowanie boolowskie a zaawansowane
Zarówno indeksowanie boolowskie, jak i zaawansowane zwraca kopie. Do filtrowania maska boolowska jest zwykle najbardziej czytelna i wystarczająco szybka — to dobry wybór domyślny.
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))Szybkie sprawdzenie
Sprawdź swoją znajomość maskowania boolowskiego i zaawansowanego indeksowania z tej lekcji.
Podsumowanie lekcji
Dobra robota! Maski boolowskie filtrują i kopiują, np.where zachowuje kształt tablicy, a zaawansowane indeksowanie pobiera dowolne wskazane elementy. Dalej: Series w Pandas!
Często zadawane pytania
Czy lekcja „Maskowanie boolowskie i zaawansowane indeksowanie” jest bezpłatna?
Tak — pełny tekst „Maskowanie boolowskie i zaawansowane indeksowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Maskowanie boolowskie i zaawansowane indeksowanie”?
Filtrować tablice za pomocą warunków boolowskich i wybierać dowolne elementy przy użyciu tablic indeksów całkowitych Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?
Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Maskowanie boolowskie i zaawansowane indeksowanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?
Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Funkcje uniwersalne (ufuncs)
- Funkcje agregujące
- Zasady broadcastingu
- Maskowanie boolowskie i zaawansowane indeksowanie