Indexare și slicing în NumPy

Accesează un element, o bucată, un rând sau o coloană dintr-un tablou NumPy cu paranteze pătrate.

Sintaxă
a[i]
a[start:stop:pas]
a[rand, coloana]
a[:, j]
a[i, :]

Ce face Indexare și slicing

La un tablou 1D, indexarea și slicing-ul funcționează ca la liste: a[0] este primul element, a[-1] ultimul, a[1:4] elementele de la poziția 1 la 3, iar a[::-1] tabloul în ordine inversă.

La un tablou 2D dai rândul și coloana separate prin virgulă: a[1, 2] este elementul de pe rândul 1, coloana 2 (numărarea începe de la 0). Două puncte înseamnă „tot”: a[:, 0] este prima coloană, a[0, :] (sau a[0]) primul rând.

Slicing-ul dă o vedere, nu o copie: dacă modifici bucata, se modifică și tabloul inițial. Prin indexare poți și atribui valori: a[0, :] = 0.

Parametri

Parametru Descriere
i, j Indici întregi. Negativii numără de la final.
start:stop:pas Bucată: de la start (inclus) la stop (exclus), cu pas. Oricare poate lipsi.

Ce returnează

Un element (scalar NumPy) pentru indici întregi pe toate axele, altfel o vedere a tabloului.

Exemple

Exemplul 1: Tablou 1D

import numpy as np

temperaturi = np.array([12, 15, 18, 21, 19, 14])
print(temperaturi[0], temperaturi[-1])
print(temperaturi[1:4])
print(temperaturi[::2])
print(temperaturi[::-1])

Rezultat

12 14
[15 18 21]
[12 18 19]
[14 19 21 18 15 12]

Exemplul 2: Tablou 2D: element, rând, coloană

Rândurile sunt magazinele (Iași, Cluj), coloanele lunile ianuarie-martie.

import numpy as np

vanzari = np.array([[120, 95, 130],
                    [80, 110, 105]])

print("Cluj, martie:", vanzari[1, 2])
print("Iași, toate lunile:", vanzari[0])
print("Ianuarie, ambele:", vanzari[:, 0])
print("Primele două luni:")
print(vanzari[:, :2])

Rezultat

Cluj, martie: 105
Iași, toate lunile: [120  95 130]
Ianuarie, ambele: [120  80]
Primele două luni:
[[120  95]
 [ 80 110]]

Exemplul 3: Atribuire prin indexare

import numpy as np

note = np.zeros((2, 3), dtype=int)
note[0, 1] = 9
note[1, :] = 7
note[:, 2] = 10
print(note)

Rezultat

[[ 0  9 10]
 [ 7  7 10]]

Greșeli frecvente

  • Scrii a[1][2] în loc de a[1, 2]. Merge, dar creează întâi un rând intermediar; la slicing (a[:][0]) rezultatul nu mai este coloana, ci primul rând.
  • Uiți că numărarea începe de la 0: al treilea rând este a[2].
  • Modifici o bucată obținută prin slicing crezând că e o copie. Folosește a[1:3].copy() dacă vrei date separate.

Comenzi înrudite

  • Măști booleene: Selectează elementele care îndeplinesc o condiție, cu un tablou de True/False pus între paranteze pătrate.
  • Indexare cu liste de indici: Selectează mai multe elemente, rânduri sau coloane deodată, dând o listă de poziții (fancy indexing).
  • Copie și vedere (copy vs view): Explică diferența dintre o vedere (aceleași date) și o copie în NumPy și cum le recunoști cu .base și np.shares_memory.
  • ndarray.shape: Află forma unui tablou (rânduri, coloane), numărul de dimensiuni și numărul total de elemente.