Indexovanie a rezanie

JupyterLab
Numpy
Polia
Skaláry
Vektory
Matice
Indexy
Submatice
Rezanie
Autor

Jakub Šperka

Publikované

18. septembra 2025

🔎 Úvod

Táto kapitola pokrýva základné aj pokročilé techniky indexovania a rezania ndarray: 1D/2D indexovanie, záporné indexy, výrezy [start:stop:step], boolean (maskové).


📦 Nastavenie a ukážkové dáta

Kód
import numpy as np

x = np.arange(10)                 # 1D pole 0..9
A = np.arange(1, 13).reshape(3,4) # 2D pole 3x4
Kód
print(f"Vektor x = \n{x}")
Vektor x = 
[0 1 2 3 4 5 6 7 8 9]
Kód
print(f"Matica A = \n{A}")
Matica A = 
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

🗂️ Základné indexovanie

1️⃣ Vektory

Kód
print(f"Vektor x = \n{x}")
Vektor x = 
[0 1 2 3 4 5 6 7 8 9]

Prvý prvok

Kód
print(x[0])    
0

Posledný prvok

Kód
print(x[-1])
9

N-tý prvok

Kód
n = 3
print(x[n])
3

2️⃣ Matice

Kód
print(f"Matica A = \n{A}")
Matica A = 
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

Jeden prvok v danom riadku a stĺpci

Kód
print(A[0, 0])   # prvok v 1. riadku, 1. stĺpci
print(A[2, 3])   # prvok v 3. riadku, 4. stĺpci
1
12

Celý riadok a stĺpec

Kód
print(A[1, :])   # 2. riadok
print(A[:, 2])   # 3. stĺpec
[5 6 7 8]
[ 3  7 11]

🪚 Rezanie – slicing [start:stop:step]

1️⃣ Vektory

Kód
print(f"Vektor x = \n{x}")
Vektor x = 
[0 1 2 3 4 5 6 7 8 9]

Rozsah medzi konkrétnymi indexami

Kód
print(x[2:7])      # indexy 2..6
[2 3 4 5 6]

Rozsah od začiatku po konkrétny index

Kód
print(x[:5])       # od začiatku po index 4
[0 1 2 3 4]

Rozsah indexu po koniec

Kód
print(x[5:])       # od indexu 5 po koniec
[5 6 7 8 9]

Každý n-tý prvok

Kód
n = 2
print(x[::n])      # každý druhý prvok
[0 2 4 6 8]

Obrátené pole (vektor)

Kód
print(x[::-1])     # obrátené pole
[9 8 7 6 5 4 3 2 1 0]

2️⃣ (Sub)matice

Kód
print(f"Matica A = \n{A}")
Matica A = 
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

Submatica: riadky 0..1, stĺpce 1..3

Kód
print(A[0:2, 1:4])
[[2 3 4]
 [6 7 8]]

Submatica: každý druhý riadok, všetky stĺpce

Kód
print(A[::2, :])
[[ 1  2  3  4]
 [ 9 10 11 12]]

Submatica: všetky riadky, každý druhý stĺpec

Kód
print(A[:, ::2])
[[ 1  3]
 [ 5  7]
 [ 9 11]]

⚔️ View vs Copy - ⚠️ pozor na zdieľanie pamäte ⚠️

Kód
print(f"Pôvodný vektor x = \n{x}")
Pôvodný vektor x = 
[0 1 2 3 4 5 6 7 8 9]
Kód
B = x[2:7]    # slicing vytvorí VIEW (zdieľa pamäť)

print(f"Subvektor B (pohľad na vektor x) = \n{B}")
Subvektor B (pohľad na vektor x) = 
[2 3 4 5 6]
Kód
B[0] = 999    # zmena prvej hodnoty v pohľade B na vektor x

print('Vektor B (pohľad na x):', B)
print('Vektor x (zmenená hodnota B):', x)
Vektor B (pohľad na x): [999   3   4   5   6]
Vektor x (zmenená hodnota B): [  0   1 999   3   4   5   6   7   8   9]
Kód
C = x[2:7].copy()  # explicitná kópia
C[0] = -1

print(f"Pôvodný vektor x = \n{x}")
print('Vektor C (Kópia x):', C)
print('Vektor x (nezmenená hodnota C):', x)
Pôvodný vektor x = 
[  0   1 999   3   4   5   6   7   8   9]
Vektor C (Kópia x): [-1  3  4  5  6]
Vektor x (nezmenená hodnota C): [  0   1 999   3   4   5   6   7   8   9]

🧪 Pokročilé indexovanie

⚖️ Boolean (maskové) indexovanie

Kód
print(f"Pôvodný vektor x = \n{x}")

maska = (x % 2 == 0) # zvyšok po delení 2 je rovný 0 (vyhľadá párne čísla)
print('mask:', maska)

print('párne:', x[maska])

# priamy zápis podmienky
print('párne:', x[(x%2==0)])
Pôvodný vektor x = 
[  0   1 999   3   4   5   6   7   8   9]
mask: [ True False False False  True False  True False  True False]
párne: [0 4 6 8]
párne: [0 4 6 8]

🗒️ Fancy indexovanie (zoznamy/polia indexov)

Kód
indexy = [0, 3, 7]
print('vybrané prvky x:', x[indexy])

riadky = np.array([0, 2])
stlpce = np.array([1, 3])
print('A[riadky, stlpce]:', A[riadky, stlpce])  # (0,1) a (2,3)
vybrané prvky x: [0 3 7]
A[riadky, stlpce]: [ 2 12]

⚗️ Miešanie integer a slice indexov

Kód
print(A[1, :])     # 2. riadok, všetky stĺpce
print(A[:, 1])     # všetky riadky, 2. stĺpec
print(A[1:3, [0,2]])  # riadky 2..3 (bez 3), stĺpce 1 a 3
[5 6 7 8]
[ 2  6 10]
[[ 5  7]
 [ 9 11]]

🧠 Zhrnutie

  • slice vracia view (zdieľanú pamäť), používajte .copy() ak chcete nezávislé dáta
  • Používajte : pre celé osi (A[:, 1])
  • Záporné indexy rátajú od konca (x[-1])

📚 Oficiálna dokumentácia NumPy

Podrobný popis funkcií, ich parametrov a príkladov použitia nájdete v oficiálnej dokumentácii knižnice NumPy na adrese: https://numpy.org/doc/stable/.


🎞️ Videonávod