Pandas & NumPy Academy · Lekcja

Wycinanie i indeksowanie tablic

Wybierać pojedyncze elementy, wiersze, kolumny i podtablice za pomocą notacji indeksów całkowitych i wycinków w tablicach wielowymiarowych

Lekcja 4 z 413 kroki

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])    # 30

Wycinanie 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 column

Wycinanie 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 2

np.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]  -- unchanged

Indeksowanie 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 3

Przypisywanie 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 vector

Szybki 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.

Bezpłatny start

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

  1. Tworzenie tablic NumPy
  2. Atrybuty tablic i ich inspekcja
  3. Działania arytmetyczne element po elemencie
  4. Wycinanie i indeksowanie tablic
← Powrót do Pandas & NumPy Academy