Ce face Indexare cu liste de indici
În loc de un singur indice poți da o listă (sau un tablou) de indici: a[[0, 2, 5]] ia elementele de pe pozițiile 0, 2 și 5, în ordinea din listă. Indicii se pot repeta și pot fi în orice ordine.
La un tablou 2D, a[[0, 2]] selectează rândurile 0 și 2, iar a[:, [1, 0]] coloanele 1 și 0. Cu două liste, a[[0, 1], [2, 0]] ia perechi de coordonate: elementele a[0, 2] și a[1, 0].
Spre deosebire de slicing, rezultatul este întotdeauna o copie.
Parametri
| Parametru | Descriere |
|---|---|
listă de indici |
Listă sau tablou de întregi; negativii numără de la final. |
Ce returnează
Un tablou nou (copie), cu forma dată de forma listei de indici.
Exemple
Exemplul 1: Elemente alese și reordonate
import numpy as np
orase = np.array(["Iași", "Cluj", "Brașov", "Timișoara", "Constanța"])
print(orase[[0, 2, 4]])
print(orase[[4, 0]])
print(orase[[1, 1, 1]])
Rezultat
['Iași' 'Brașov' 'Constanța']
['Constanța' 'Iași']
['Cluj' 'Cluj' 'Cluj']
Exemplul 2: Rânduri, coloane și perechi
import numpy as np
vanzari = np.array([[120, 95, 130],
[80, 110, 105],
[60, 70, 90]])
print(vanzari[[0, 2]])
print(vanzari[:, [2, 0]])
print(vanzari[[0, 1, 2], [2, 0, 1]])
Rezultat
[[120 95 130]
[ 60 70 90]]
[[130 120]
[105 80]
[ 90 60]]
[130 80 70]
Exemplul 3: Rezultatul este o copie
import numpy as np
note = np.array([9, 7, 10, 8])
alese = note[[0, 1]]
alese[0] = 1
print(note)
print(alese)
Rezultat
[ 9 7 10 8]
[1 7]
Greșeli frecvente
- Scrii indicii fără lista interioară:
a[0, 2]pe un tablou 1D dăIndexError, pentru că se interpretează ca rând și coloană. Corect:a[[0, 2]]. - Aștepți ca
a[[0, 1], [0, 1]]să dea un sub-tabel 2 x 2. Dă doar elementelea[0, 0]șia[1, 1]; pentru sub-tabel foloseștea[[0, 1]][:, [0, 1]]saua[np.ix_([0, 1], [0, 1])]. - Atribui pe rezultatul unei selecții cu listă crezând că schimbi tabloul (
b = a[[0, 1]]; b[0] = 5). Atribuie direct:a[[0, 1]] = 5.
Comenzi înrudite
Indexare și slicing: Accesează un element, o bucată, un rând sau o coloană dintr-un tablou NumPy cu paranteze pătrate.Măști booleene: Selectează elementele care îndeplinesc o condiție, cu un tablou de True/False pus între paranteze pătrate.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.np.argsort(): Returnează indicii care ar sorta tabloul; așa sortezi un tablou după altul, de exemplu numele după note.