Slicing e indicizzazione degli array
Selezioni singoli elementi, righe, colonne e sottoarray usando la notazione con interi e slice sugli array multidimensionali.
Slicing e indicizzazione degli array è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Indicizzazione con interi negli array 1D
Un array 1D viene indicizzato come una lista: a[0] è il primo elemento, a[-1] l'ultimo. L'indicizzazione restituisce un singolo scalare e gli indici negativi contano dalla fine.
import numpy as np
a = np.array([10, 20, 30, 40, 50])
print(a[0]) # 10
print(a[-1]) # 50
print(a[2]) # 30Slicing di array 1D
Gli slice usano start:stop:step come le liste, ma uno slice NumPy restituisce una view, non una copia. Modificando lo slice modifica anche l'originale, quindi usi .copy() quando necessario.
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]Indicizzazione di array 2D
Per gli array 2D, usi la sintassi con la virgola: a[row, col]. I due punti da soli indicano tutto lungo quell'asse: a[0, :] seleziona un'intera riga e a[:, 1] un'intera colonna.
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 columnSlicing di array 2D
Fornisca due slice per selezionare un blocco rettangolare: a[0:2, 1:3] prende quelle righe e colonne. Il risultato è una view, quindi le modifiche si riflettono sull'originale.
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]]Indicizzazione booleana
Passi un array booleano per mantenere solo gli elementi contrassegnati come True. Questa indicizzazione booleana restituisce sempre una copia ed è il modo standard per filtrare i dati.
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]Indicizzazione avanzata con array di interi
L'indicizzazione avanzata consente di selezionare elementi in qualsiasi posizione tramite una lista di interi, in qualunque ordine e anche ripetendoli. Restituisce sempre una copia.
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 2np.where per la selezione condizionale
np.where(condition, x, y) seleziona x dove la condizione è True e y dove è False: un modo rapido, senza cicli, per scegliere i valori elemento per elemento.
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]),)Gli slice sono viste: attenzione!
Attenzione: poiché gli slice sono view, modificarne uno modifica anche l'array originale. Le serve una parte indipendente? Chiami prima .copy() sullo slice. ⚠️
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] -- unchangedIndicizzazione di array 3D
Gli array possono avere un numero qualsiasi di dimensioni. Per un array 3D si usano tre posizioni: a[depth, row, col], una struttura comune nella gestione di batch di immagini.
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 3Assegnare valori tramite l'indicizzazione
Qualsiasi forma di indicizzazione può trovarsi a sinistra di = per modificare i valori in-place: slice, maschere o indici avanzati. Assegni uno scalare e NumPy lo distribuirà in ogni posizione.
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.]Ellissi e np.newaxis
np.newaxis (o None) aggiunge un asse di dimensione 1, trasformando un array (5,) in un vettore colonna (5, 1), una configurazione comune prima del broadcasting.
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 vectorVerifica rapida
Verifichi la Sua comprensione dello slicing e dell'indicizzazione degli array NumPy trattati in questa lezione.
Riepilogo della lezione
Ben fatto! Gli slice sono viste che condividono la memoria, l'indicizzazione booleana filtra e crea una copia, mentre l'indicizzazione avanzata seleziona gli elementi specificati. Prossimo argomento: le funzioni universali.
Domande Frequenti
La lezione «Slicing e indicizzazione degli array» è gratuita?
Sì — il testo completo di «Slicing e indicizzazione degli array» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Cosa imparerò in «Slicing e indicizzazione degli array»?
Selezioni singoli elementi, righe, colonne e sottoarray usando la notazione con interi e slice sugli array multidimensionali. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?
Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Slicing e indicizzazione degli array»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?
Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creazione di array NumPy
- Attributi e ispezione degli array
- Aritmetica elemento per elemento
- Slicing e indicizzazione degli array