Altra forma per indicizzare in Python
Sto seguendo un corso di Machine Learning e in una revisione della libreria numpy, viene utilizzato un metodo di indicizzazione che non ho mai visto prima. Abbiamo definito a = np.array([[1,2],[3,4],[5,6]]). Successivamente vengono creati due nuovi array: np.array([a[0,0], a[1,1], a[2,1]]. Questo è il modo di indicizzazione che conosco. Il modo di indicizzazione che non so è questo: print(a[[0,1,2],[0,1,1]]). Qualcuno potrebbe aiutarmi con una spiegazione su questa ultima forma di indicizzazione?
Risposte
Quando gli narray vengono passati, dove nè il numero di dimensioni dell'array, vengono utilizzati come indici per le dimensioni corrispondenti. a[[0,1,2],[0,1,1]]è equivalente a[a[0,0], a[1,1], a[2,1]]
Lasciatemi citare i documenti numpy :
... Da ogni riga dovrebbe essere selezionato un elemento specifico. L'indice di riga è solo [0, 1, 2] e l'indice di colonna specifica l'elemento da scegliere per la riga corrispondente, qui [0, 1, 0]. Usando entrambi insieme l'attività può essere risolta utilizzando l'indicizzazione avanzata:
x = np.array([[1, 2], [3, 4], [5, 6]])
x[[0, 1, 2], [0, 1, 0]]
array([1, 4, 5])
Chiama l' indicizzazione di array di numeri interi . Nel tuo esempio, stai accedendo agli [[0,1,2],[0,1,1]]indici di un array 1x3, chiamato a. Significa che stai ottenendo da a:
[
the first element of the first array,contained in this 1x3 array,
the second element of the second array, contained in this big array,
the second element of the third array, contained in the same array
]
Stampare, si otterrà l'output di [1 4 6], perché quelli sono gli elementi nelle posizioni specificate ( (0,0), (1,1), (2,1)). Puoi visualizzarlo come uno schema di colonne e righe :
[[rows],[colums]] # vertically speaking
Seleziona le righe degli elementi che desideri nel primo sotto-array e le colonne nel secondo.