NumPy - Indicizzazione e sezionamento
È possibile accedere ai contenuti dell'oggetto ndarray e modificarli indicizzandoli o affettandoli, proprio come gli oggetti contenitore in-built di Python.
Come accennato in precedenza, gli elementi nell'oggetto ndarray seguono l'indice in base zero. Sono disponibili tre tipi di metodi di indicizzazione:field access, basic slicing e advanced indexing.
L'affettatura di base è un'estensione del concetto di base di Python di affettare in n dimensioni. Un oggetto slice Python viene costruito dandostart, stop, e step parametri al built-in slicefunzione. Questo oggetto slice viene passato all'array per estrarre una parte dell'array.
Esempio 1
import numpy as np
a = np.arange(10)
s = slice(2,7,2)
print a[s]
Il suo output è il seguente:
[2 4 6]
Nell'esempio sopra, un file ndarray oggetto è preparato da arange()funzione. Quindi un oggetto slice viene definito con i valori start, stop e step 2, 7 e 2 rispettivamente. Quando questo oggetto slice viene passato al ndarray, una parte di esso che inizia con indice 2 fino a 7 con un passo di 2 viene tagliata.
Lo stesso risultato può essere ottenuto anche assegnando i parametri di slicing separati da due punti: (start: stop: step) direttamente al ndarray oggetto.
Esempio 2
import numpy as np
a = np.arange(10)
b = a[2:7:2]
print b
Qui, otterremo lo stesso output -
[2 4 6]
Se viene inserito un solo parametro, verrà restituito un singolo elemento corrispondente all'indice. Se un: è inserito davanti ad esso, verranno estratti tutti gli elementi da quell'indice in poi. Se vengono utilizzati due parametri (con: tra di loro), gli elementi tra i due indici (escluso l'indice di arresto) con il passaggio uno predefinito vengono tagliati.
Esempio 3
# slice single item
import numpy as np
a = np.arange(10)
b = a[5]
print b
Il suo output è il seguente:
5
Esempio 4
# slice items starting from index
import numpy as np
a = np.arange(10)
print a[2:]
Ora, l'output sarebbe:
[2 3 4 5 6 7 8 9]
Esempio 5
# slice items between indexes
import numpy as np
a = np.arange(10)
print a[2:5]
Qui, l'output sarebbe:
[2 3 4]
La descrizione di cui sopra si applica al multidimensionale ndarray pure.
Esempio 6
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print a
# slice items starting from index
print 'Now we will slice the array from the index a[1:]'
print a[1:]
L'output è il seguente:
[[1 2 3]
[3 4 5]
[4 5 6]]
Now we will slice the array from the index a[1:]
[[3 4 5]
[4 5 6]]
Il sezionamento può anche includere puntini di sospensione (…) per creare una tupla di selezione della stessa lunghezza della dimensione di un array. Se i puntini di sospensione vengono utilizzati nella posizione della riga, restituirà un ndarray composto da elementi nelle righe.
Esempio 7
# array to begin with
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print 'Our array is:'
print a
print '\n'
# this returns array of items in the second column
print 'The items in the second column are:'
print a[...,1]
print '\n'
# Now we will slice all items from the second row
print 'The items in the second row are:'
print a[1,...]
print '\n'
# Now we will slice all items from column 1 onwards
print 'The items column 1 onwards are:'
print a[...,1:]
L'output di questo programma è il seguente:
Our array is:
[[1 2 3]
[3 4 5]
[4 5 6]]
The items in the second column are:
[2 4 5]
The items in the second row are:
[3 4 5]
The items column 1 onwards are:
[[2 3]
[4 5]
[5 6]]