0Pricing
Python Academy · Lekcja

Indeksowanie, wycinanie i zaawansowane indeksowanie

Proszę uzyskiwać dostęp do elementów tablic i modyfikować je za pomocą zaawansowanych technik indeksowania.

Indeksowanie, wycinanie i zaawansowane indeksowanie to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 3 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 Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Podstawowe indeksowanie

Elementy są dostępne za pomocą indeksów całkowitych liczonych od zera. Indeksy ujemne są liczone od końca. W tablicach wielowymiarowych należy używać indeksów oddzielonych przecinkami.

import numpy as np

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[0, 2])    # 3
print(arr[-1, -1])  # 9
print(arr[1])       # [4 5 6]

Wycinanie

Składnia wycinania start:stop:step zwraca widok. Jest stosowana niezależnie w każdym wymiarze.

import numpy as np

m = np.arange(16).reshape(4,4)
print(m[1:3, 1:3])
# [[5 6]
#  [9 10]]
print(m[::2, ::2])   # every other row and column

Indeksowanie logiczne (maskowanie)

Przekazanie tablicy wartości logicznych o tym samym kształcie pozwala wybrać elementy, dla których wartość to True.

import numpy as np

arr = np.array([1, -2, 3, -4, 5])
mask = arr > 0
print(mask)         # [ True False  True False  True]
print(arr[mask])    # [1 3 5]
arr[~mask] = 0      # set negatives to 0
print(arr)          # [1 0 3 0 5]

Zaawansowane indeksowanie za pomocą tablic całkowitoliczbowych

Przekazanie tablicy indeksów całkowitoliczbowych pozwala wybrać wiele określonych elementów.

import numpy as np

arr = np.array([10, 20, 30, 40, 50])
idx = np.array([0, 2, 4])
print(arr[idx])   # [10 30 50]

# 2-D fancy indexing:
m = np.arange(9).reshape(3,3)
print(m[[0,2], [0,2]])   # [m[0,0], m[2,2]] = [0, 8]

np.where do indeksowanego wyboru

np.where(condition) (z jednym argumentem) zwraca indeksy, dla których warunek ma wartość True.

import numpy as np

arr = np.array([5, 2, 8, 1, 9])
idx = np.where(arr > 4)[0]
print(idx)         # [0 2 4]
print(arr[idx])    # [5 8 9]

np.take i np.put

np.take(arr, indices) wybiera elementy (obsługuje indeksowanie spłaszczonej tablicy). np.put(arr, indices, values) wstawia wartości.

import numpy as np

arr = np.array([10, 20, 30, 40])
print(np.take(arr, [1, 3]))   # [20 40]

np.put(arr, [0, 2], [99, 88])
print(arr)   # [99 20 88 40]

np.nonzero

np.nonzero(arr) zwraca krotkę tablic — po jednej na każdy wymiar — zawierających indeksy elementów niezerowych.

import numpy as np

arr = np.array([[0,1,0],[2,0,3]])
rows, cols = np.nonzero(arr)
print(rows, cols)   # [0 1 1] [1 0 2]

Indeksowanie za pomocą wielokropka

... (Ellipsis) rozwija się do tylu znaków :, ile potrzeba do objęcia pozostałych wymiarów.

import numpy as np

arr = np.ones((2,3,4,5))
print(arr[0, ..., 2].shape)   # (3, 4) — first dim=0, last dim=2
print(arr[..., 0].shape)      # (2, 3, 4) — last dim=0

np.ix_ do indeksowania zewnętrznego

np.ix_ tworzy otwartą siatkę z wielu sekwencji jednowymiarowych na potrzeby zaawansowanego indeksowania w stylu iloczynu zewnętrznego.

import numpy as np

m = np.arange(25).reshape(5,5)
rows = [0, 2, 4]
cols = [1, 3]
print(m[np.ix_(rows, cols)])
# [[ 1  3]
#  [11 13]
#  [21 23]]

Przypisywanie do indeksu zaawansowanego

Do elementów wybranych za pomocą indeksowania zaawansowanego można przypisywać wartości bezpośrednio.

import numpy as np

arr = np.zeros(5)
arr[[1, 3]] = [10, 20]
print(arr)   # [ 0. 10.  0. 20.  0.]

# Broadcast a scalar:
arr[[0, 2, 4]] = 99
print(arr)   # [99. 10. 99. 20. 99.]

Różnica między widokiem a kopią w indeksowaniu

Indeksowanie podstawowe/wycinanie → widok (modyfikowanie zmienia oryginał). Indeksowanie zaawansowane/logiczne → kopia (modyfikowanie NIE zmienia oryginału).

import numpy as np

arr = np.arange(5)
view = arr[1:4]   # view
view[0] = 99
print(arr)         # [0 99 2 3 4]

copy = arr[[1,2,3]]   # fancy → copy
copy[0] = 0
print(arr)         # unchanged

Szybkie sprawdzenie

Czy indeksowanie logiczne/zaawansowane zwraca widok, czy kopię?

Podsumowanie

Do pojedynczych elementów należy używać [row, col], do wycinania — start:stop:step (widoki), do maskowania — tablic wartości logicznych (kopie), a do zaawansowanego indeksowania — tablic całkowitoliczbowych (kopie). np.where służy do uzyskiwania indeksów, a np.ix_ do tworzenia siatek zewnętrznych.

Często zadawane pytania

Czy lekcja „Indeksowanie, wycinanie i zaawansowane indeksowanie” jest bezpłatna?

Tak — pełny tekst „Indeksowanie, wycinanie 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 Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Indeksowanie, wycinanie i zaawansowane indeksowanie”?

Proszę uzyskiwać dostęp do elementów tablic i modyfikować je za pomocą zaawansowanych technik indeksowania. Ćwiczysz Python 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ąć Python Academy?

Nie wymagamy żadnego doświadczenia. Python 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 3 z 4.

Ile czasu zajmuje lekcja „Indeksowanie, wycinanie 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 Python Academy?

Tak. Każda lekcja Python 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. Tablice NumPy i dtypes
  2. Operacje na tablicach i broadcasting
  3. Indeksowanie, wycinanie i zaawansowane indeksowanie
  4. Algebra liniowa z NumPy
← Powrót do Python Academy