0Pricing
Pandas & NumPy Academy · Lezione

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])    # 30

Slicing 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 column

Slicing 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 2

np.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]  -- unchanged

Indicizzazione 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 3

Assegnare 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 vector

Verifica 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

  1. Creazione di array NumPy
  2. Attributi e ispezione degli array
  3. Aritmetica elemento per elemento
  4. Slicing e indicizzazione degli array
← Torna a Pandas & NumPy Academy