Altra forma per indicizzare in Python

Oct 08 2020

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

1 Marat Oct 08 2020 at 05:15

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])
1 Gabitohh Oct 08 2020 at 05:29

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.