L’indicizzazione in NumPy è uno degli aspetti fondamentali per lavorare in modo efficiente con gli array. Comprendere come accedere, modificare e selezionare porzioni di dati consente di scrivere codice più veloce, leggibile e scalabile, soprattutto in contesti di data analysis, machine learning e scientific computing.
In questa guida analizziamo in modo pratico e progressivo le principali tecniche di indicizzazione e slicing in NumPy.
Indicizzazione e slicing di array monodimensionali
Gli array monodimensionali (simili alle liste Python) rappresentano il caso più semplice.
Indicizzazione base
Puoi accedere agli elementi tramite indice:
import numpy as nparr = np.array([10, 20, 30, 40, 50])print(arr[0]) # 10
print(arr[2]) # 30
Slicing
Lo slicing permette di selezionare sottoinsiemi:
print(arr[1:4]) # [20 30 40]
print(arr[:3]) # [10 20 30]
print(arr[::2]) # [10 30 50]
Struttura:array[start:stop:step]
👉 Nota strategica: lo slicing in NumPy restituisce una vista (view), non una copia. Questo significa che modificare lo slice modifica anche l’array originale.
Indicizzazione e Slicing di Array Bidimensionali
Gli array bidimensionali (matrici) introducono una seconda dimensione: righe e colonne.
Accesso agli elementi
arr2d = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])print(arr2d[0, 1]) # 2
Selezione di righe e colonne
print(arr2d[1, :]) # seconda riga → [4 5 6]
print(arr2d[:, 1]) # seconda colonna → [2 5 8]
Slicing avanzato
print(arr2d[0:2, 1:3])
# Output:
# [[2 3]
# [5 6]]
👉 Insight operativo: padroneggiare il slicing 2D è essenziale per operazioni su dataset, immagini e matrici numeriche.
Indicizzazione e Slicing di Array Tridimensionali
Gli array tridimensionali sono utilizzati in contesti più avanzati, come immagini RGB o dati multi-dimensione.
Struttura
Un array 3D ha tre assi:
- profondità
- righe
- colonne
arr3d = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
Accesso agli elementi
print(arr3d[0, 1, 1]) # 4
Slicing
print(arr3d[:, :, 1])
# Output:
# [[2 4]
# [6 8]]
👉 Applicazione reale: questo tipo di indicizzazione è fondamentale nel processing di immagini e nei modelli di deep learning.
Indicizzazione Negativa
NumPy supporta l’indicizzazione negativa per accedere agli elementi partendo dalla fine.
Esempi
arr = np.array([10, 20, 30, 40, 50])print(arr[-1]) # 50
print(arr[-2]) # 40
Slicing con indici negativi
print(arr[-3:]) # [30 40 50]
print(arr[:-2]) # [10 20 30]
👉 Best practice: usare l’indicizzazione negativa rende il codice più flessibile, soprattutto quando la dimensione dell’array non è fissa.