NumPy - Indexación y corte

Se puede acceder al contenido del objeto ndarray y modificarlo indexando o dividiendo, al igual que los objetos contenedores integrados de Python.

Como se mencionó anteriormente, los elementos del objeto ndarray siguen un índice de base cero. Hay tres tipos de métodos de indexación disponibles:field access, basic slicing y advanced indexing.

El corte básico es una extensión del concepto básico de Python de corte en n dimensiones. Un objeto de corte de Python se construye dandostart, stopy step parámetros a la incorporada slicefunción. Este objeto de corte se pasa a la matriz para extraer una parte de la matriz.

Ejemplo 1

import numpy as np 
a = np.arange(10) 
s = slice(2,7,2) 
print a[s]

Su salida es la siguiente:

[2  4  6]

En el ejemplo anterior, un ndarray el objeto es preparado por arange()función. Luego, un objeto de corte se define con los valores de inicio, parada y paso 2, 7 y 2 respectivamente. Cuando este objeto de corte se pasa al ndarray, se divide una parte del mismo que comienza con el índice 2 hasta el 7 con un paso de 2.

El mismo resultado también se puede obtener dando los parámetros de corte separados por dos puntos: (inicio: parada: paso) directamente al ndarray objeto.

Ejemplo 2

import numpy as np 
a = np.arange(10) 
b = a[2:7:2] 
print b

Aquí, obtendremos el mismo resultado:

[2  4  6]

Si solo se coloca un parámetro, se devolverá un solo elemento correspondiente al índice. Si se inserta un: delante de él, se extraerán todos los elementos de ese índice en adelante. Si se utilizan dos parámetros (con: entre ellos), los elementos entre los dos índices (sin incluir el índice de parada) con el paso uno predeterminado se dividen.

Ejemplo 3

# slice single item 
import numpy as np 

a = np.arange(10) 
b = a[5] 
print b

Su salida es la siguiente:

5

Ejemplo 4

# slice items starting from index 
import numpy as np 
a = np.arange(10) 
print a[2:]

Ahora, la salida sería:

[2  3  4  5  6  7  8  9]

Ejemplo 5

# slice items between indexes 
import numpy as np 
a = np.arange(10) 
print a[2:5]

Aquí, la salida sería:

[2  3  4]

La descripción anterior se aplica a multidimensionales ndarray también.

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

La salida es la siguiente:

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

El corte también puede incluir puntos suspensivos (…) para hacer una tupla de selección de la misma longitud que la dimensión de una matriz. Si se utilizan puntos suspensivos en la posición de la fila, devolverá un ndarray compuesto por elementos en filas.

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

El resultado de este programa es el siguiente:

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