0Pricing
Python Academy · Lezione

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 column

Indicizzazione 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=0

np.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)         # unchanged

Verifica 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

  1. Array NumPy e dtype
  2. Operazioni sugli array e broadcasting
  3. Indicizzazione, slicing e indicizzazione avanzata
  4. Algebra lineare con NumPy
← Torna a Python Academy