Wycinanie i indeksowanie tablic
Wybierać pojedyncze elementy, wiersze, kolumny i podtablice za pomocą notacji indeksów całkowitych i wycinków w tablicach wielowymiarowych
Wycinanie i indeksowanie tablic 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.
Indeksowanie liczbami całkowitymi w tablicach 1D
Tablicę 1D indeksuje się tak samo jak listę: a[0] to pierwszy element, a[-1] to ostatni. Indeksowanie zwraca pojedynczy skalar, a liczby ujemne liczą elementy od końca.
import numpy as np
a = np.array([10, 20, 30, 40, 50])
print(a[0]) # 10
print(a[-1]) # 50
print(a[2]) # 30Wycinanie tablic 1D
Wycinanie używa składni start:stop:step, podobnie jak w przypadku list, ale wycinek NumPy zwraca widok — bez kopii. Zmiana wycinka zmienia więc oryginał; w razie potrzeby należy użyć .copy().
import numpy as np
a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
print(a[2:7]) # [2 3 4 5 6]
print(a[::2]) # [0 2 4 6 8]
print(a[::-1]) # [9 8 7 6 5 4 3 2 1 0]Indeksowanie tablic 2D
W przypadku tablic 2D należy używać składni z przecinkiem: a[row, col]. Sam dwukropek oznacza wszystkie elementy wzdłuż danej osi, więc a[0, :] pobiera cały wiersz, a a[:, 1] całą kolumnę.
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(m[1, 2]) # 6 (row 1, col 2)
print(m[0, :]) # [1 2 3] first row
print(m[:, 1]) # [2 5 8] second columnWycinanie tablic 2D
Aby pobrać prostokątny fragment, należy podać dwa wycinki: a[0:2, 1:3] wybiera wskazane wiersze i kolumny. Wynik jest widokiem, więc zmiany zostaną wprowadzone również w oryginale.
import numpy as np
m = np.arange(16).reshape(4, 4)
print(m)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
print(m[1:3, 1:3])
# [[ 5 6]
# [ 9 10]]Indeksowanie za pomocą wartości logicznych
Przekazanie tablicy wartości logicznych pozwala zachować tylko elementy oznaczone jako True. Takie indeksowanie logiczne zawsze zwraca kopię i jest standardowym sposobem filtrowania danych.
import numpy as np
a = np.array([3, 7, 2, 9, 1, 6])
mask = a > 4
print(mask) # [False True False True False True]
print(a[mask]) # [7 9 6]
# Equivalent one-liner
print(a[a > 4]) # [7 9 6]Indeksowanie zaawansowane tablicami liczb całkowitych
Indeksowanie zaawansowane pozwala wybierać elementy z dowolnych pozycji za pomocą listy liczb całkowitych — w dowolnej kolejności, nawet wielokrotnie. Zawsze zwraca kopię.
import numpy as np
a = np.array([10, 20, 30, 40, 50])
idx = [4, 1, 3]
print(a[idx]) # [50 20 40]
# Selecting specific rows from a 2D array
m = np.arange(20).reshape(4, 5)
print(m[[0, 2], :]) # rows 0 and 2np.where do wyboru warunkowego
np.where(condition, x, y) wybiera wartości z x tam, gdzie warunek jest True, a z y tam, gdzie jest False — to szybki sposób wyboru wartości dla poszczególnych elementów, bez pętli.
import numpy as np
a = np.array([5, -3, 8, -1, 2])
result = np.where(a > 0, a, 0) # keep positives, zero negatives
print(result) # [5 0 8 0 2]
# np.where with one argument returns indices of True elements
idx = np.where(a > 0)
print(idx) # (array([0, 2, 4]),)Wycinki są widokami — uwaga!
Uwaga: ponieważ wycinki są widokami, ich edycja zmienia również oryginalną tablicę. Jeśli potrzebny jest niezależny fragment, najpierw należy wywołać .copy() na wycinku. ⚠️
import numpy as np
original = np.arange(6)
view = original[2:5] # view, not copy
view[:] = 99
print(original) # [ 0 1 99 99 99 5] -- original changed!
safe = original[2:5].copy() # true copy
safe[:] = 0
print(original) # [ 0 1 99 99 99 5] -- unchangedIndeksowanie tablic 3D
Tablice mogą mieć dowolną liczbę wymiarów. Tablicę 3D indeksuje się za pomocą trzech pozycji: a[depth, row, col] — jest to częste przy przetwarzaniu partii obrazów.
import numpy as np
t = np.arange(24).reshape(2, 3, 4)
print(t.shape) # (2, 3, 4)
print(t[0, :, :]) # first 'plane' -- shape (3, 4)
print(t[1, 2, 3]) # scalar at depth 1, row 2, col 3Przypisywanie wartości przez indeksowanie
Każda forma indeksowania może wystąpić po lewej stronie operatora =, aby zmieniać wartości w miejscu — dotyczy to wycinków, masek i indeksów zaawansowanych. Po przypisaniu skalara NumPy rozprowadzi go do każdego miejsca.
import numpy as np
a = np.zeros(8)
a[2:5] = 1.0 # slice assignment
print(a) # [0. 0. 1. 1. 1. 0. 0. 0.]
a[a == 0] = -1.0 # boolean assignment
print(a) # [-1. -1. 1. 1. 1. -1. -1. -1.]Ellipsis i np.newaxis
np.newaxis (lub None) dodaje oś o rozmiarze 1, zmieniając tablicę (5,) w wektor kolumnowy (5, 1) — jest to częste przygotowanie do broadcastingu.
import numpy as np
t = np.ones((2, 3, 4))
print(t[..., 0].shape) # (2, 3) -- last axis fixed at 0
a = np.array([1, 2, 3])
print(a.shape) # (3,)
print(a[:, np.newaxis].shape) # (3, 1) column vectorSzybki test
Sprawdź swoją wiedzę na temat wycinania i indeksowania tablic NumPy z tego rozdziału.
Podsumowanie rozdziału
Doskonale! Wycinki są widokami współdzielącymi pamięć, indeksowanie logiczne filtruje dane i tworzy kopię, a indeksowanie zaawansowane pobiera wskazane elementy. Następny temat: funkcje uniwersalne.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Wycinanie i indeksowanie tablic” jest bezpłatna?
Tak — pełny tekst „Wycinanie i indeksowanie tablic” 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 „Wycinanie i indeksowanie tablic”?
Wybierać pojedyncze elementy, wiersze, kolumny i podtablice za pomocą notacji indeksów całkowitych i wycinków w tablicach wielowymiarowych Ć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 „Wycinanie i indeksowanie tablic”?
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
- Tworzenie tablic NumPy
- Atrybuty tablic i ich inspekcja
- Działania arytmetyczne element po elemencie
- Wycinanie i indeksowanie tablic