Contenuti del Corso
Numpy Definitivo
Numpy Definitivo
Indicizzazione con Array di Interi
Oltre all'indicizzazione di base, dove usiamo un intero per un singolo indice, NumPy ci permette anche di usare un intero array 1D di interi (è possibile anche una lista di interi) per l'indicizzazione.
Indicizzazione con Array di Interi in Array 1D
Ogni elemento dell'array di interi usato per l'indicizzazione è trattato come un indice, quindi, ad esempio, array[[0, 1, 3]]
recupera gli elementi agli indici 0
, 1
e 3
sotto forma di un array 1D, dato che array
è esso stesso un array 1D. Puoi anche usare array NumPy per l'indicizzazione, ma rende il codice più ingombrante.
import numpy as np array = np.array([23, 41, 7, 80, 3]) # Retrieving elements at indices 0, 1 and 3 print(array[[0, 1, 3]]) # Retrieving elements at indices 1, -1 and 2 in this order print(array[[1, -1, 2]]) # IndexError is thrown since index 5 is out of bounds print(array[[2, 5]])
Indicizzazione di Array di Interi in Array 1D
Parlando di array 2D e di dimensioni superiori, l'indicizzazione di array di interi funziona allo stesso modo degli array 1D lungo ciascun asse. Se utilizziamo solo un array di interi per l'indicizzazione, indichiamo lungo un solo asse (asse 0). Se utilizziamo due array separati da una virgola, indichiamo lungo entrambi gli assi (asse 0 e asse 1).
L'indicizzazione solo lungo l'asse 0 utilizzando un array di interi restituisce un array 2D. Quando accediamo agli elementi tramite tale indicizzazione, li raggruppiamo in un nuovo array. Questo nuovo array è composto da array 1D, e raggruppandoli si aumenta la dimensionalità di uno, risultando in un array 2D.
L'indicizzazione lungo l'asse 0 e l'asse 1 utilizzando due array di interi restituisce un array 1D.
Nota
Tutti gli array di interi utilizzati per ciascuno degli assi devono avere la stessa forma.
import numpy as np array_2d = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # Retrieving first and the third row print(array_2d[[0, 2]]) # Retrieving the main diagonal elements print(array_2d[[0, 1, 2], [0, 1, 2]]) # Retrieving the first and third element of the second row print(array_2d[1, [0, 2]]) # IndexError is thrown, since index 3 along axis 0 is out of bounds print(array_2d[[0, 3], [0, 1]])
Come puoi vedere, possiamo anche combinare l'indicizzazione intera di base e l'indicizzazione tramite array di interi.
Nota
Ancora una volta, se almeno uno degli indici è fuori dai limiti, viene generato un
IndexError
.
Parlando di applicazioni, tale indicizzazione è utile quando è necessario selezionare elementi specifici che non sono adiacenti tra loro o che non seguono un ordine regolare. A differenza dello slicing, che funziona con intervalli continui, questo metodo ti permette di scegliere esattamente quali elementi recuperare. È utile quando si desidera estrarre dati sparsi o riordinare i valori in un array.
1. Stai analizzando i dati di vendita mensili (in migliaia) per cinque prodotti. Qual è l'output del codice?
2. L'array temperatures
rappresenta le temperature settimanali (in °C) di tre città durante lunedì, martedì e mercoledì. Seleziona l'opzione corretta per recuperare le temperature di Berlino lunedì e martedì, e di Madrid martedì.
Grazie per i tuoi commenti!