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]]