Indicizzazione, slicing e indicizzazione avanzata
Acceda e modifichi gli elementi degli array con tecniche di indicizzazione avanzate.
Indicizzazione, slicing e indicizzazione avanzata è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 3 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 Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Indicizzazione di base
Acceda agli elementi con indici interi a base zero. Gli indici negativi contano dalla fine. Gli array multidimensionali utilizzano indici separati da virgole.
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]Slicing
La sintassi dello slicing start:stop:step restituisce una vista. Si applica indipendentemente a ogni dimensione.
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 columnIndicizzazione booleana (mascheramento)
Passi un array booleano della stessa forma per selezionare gli elementi nei punti in cui il valore è 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]Fancy indexing con array di interi
Passi un array di indici interi per selezionare più elementi specifici.
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 per la selezione indicizzata
np.where(condition) (con un solo argomento) restituisce gli indici nei punti in cui la condizione è 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 e np.put
np.take(arr, indices) seleziona gli elementi (supporta l'indicizzazione lineare). np.put(arr, indices, values) inserisce i valori.
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) restituisce una tupla di array, uno per dimensione, contenenti gli indici degli elementi diversi da zero.
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]Indicizzazione con ellissi
... (Ellipsis) si espande nel numero di : necessario per coprire le dimensioni rimanenti.
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=0np.ix_ per l'indicizzazione esterna
np.ix_ costruisce una griglia aperta da più sequenze 1-D per un fancy indexing in stile prodotto esterno.
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]]Assegnazione a un indice avanzato
È possibile assegnare sul posto a una selezione ottenuta con fancy indexing.
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.]Differenza tra vista e copia nell'indicizzazione
Indicizzazione di base o tramite slicing → vista (le modifiche cambiano l'originale). Indicizzazione avanzata o booleana → copia (le modifiche NON cambiano l'originale).
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) # unchangedVerifica rapida
L'indicizzazione booleana o avanzata restituisce una vista o una copia?
Riepilogo
Utilizzi [row, col] per i singoli elementi, start:stop:step per gli slice (viste), gli array booleani per il mascheramento (copie) e gli array di interi per il fancy indexing (copie). Utilizzi np.where per ottenere gli indici e np.ix_ per le griglie esterne.
Domande Frequenti
La lezione «Indicizzazione, slicing e indicizzazione avanzata» è gratuita?
Sì — il testo completo di «Indicizzazione, slicing e indicizzazione avanzata» è 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 Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «Indicizzazione, slicing e indicizzazione avanzata»?
Acceda e modifichi gli elementi degli array con tecniche di indicizzazione avanzate. Eserciti Python 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 Python Academy?
Non è richiesta alcuna esperienza precedente. Python 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 3 di 4.
Quanto tempo richiede la lezione «Indicizzazione, slicing e indicizzazione avanzata»?
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 Python Academy?
Sì. Ogni lezione Python 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
- Array NumPy e dtype
- Operazioni sugli array e broadcasting
- Indicizzazione, slicing e indicizzazione avanzata
- Algebra lineare con NumPy