NumPy - Indexação e Fatiamento

O conteúdo do objeto ndarray pode ser acessado e modificado por indexação ou divisão, assim como os objetos de contêiner embutidos do Python.

Conforme mencionado anteriormente, os itens no objeto ndarray seguem o índice baseado em zero. Três tipos de métodos de indexação estão disponíveis -field access, basic slicing e advanced indexing.

O fatiamento básico é uma extensão do conceito básico do Python de fatiar para n dimensões. Um objeto de fatia Python é construído dandostart, stop, e step parâmetros para o embutido slicefunção. Este objeto de fatia é passado para a matriz para extrair uma parte da matriz.

Exemplo 1

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

Seu resultado é o seguinte -

[2  4  6]

No exemplo acima, um ndarray objeto é preparado por arange()função. Em seguida, um objeto de fatia é definido com os valores de início, parada e etapa 2, 7 e 2, respectivamente. Quando este objeto de fatia é passado para o ndarray, uma parte dele começando com o índice 2 até 7 com uma etapa de 2 é fatiada.

O mesmo resultado também pode ser obtido fornecendo os parâmetros de corte separados por dois pontos: (iniciar: parar: passo) diretamente para o ndarray objeto.

Exemplo 2

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

Aqui, obteremos a mesma saída -

[2  4  6]

Se apenas um parâmetro for colocado, um único item correspondente ao índice será retornado. Se um: for inserido na frente dele, todos os itens desse índice em diante serão extraídos. Se dois parâmetros (com: entre eles) forem usados, os itens entre os dois índices (sem incluir o índice de parada) com a etapa padrão um serão divididos.

Exemplo 3

# slice single item 
import numpy as np 

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

Seu resultado é o seguinte -

5

Exemplo 4

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

Agora, a saída seria -

[2  3  4  5  6  7  8  9]

Exemplo 5

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

Aqui, a saída seria -

[2  3  4]

A descrição acima se aplica a sistemas multidimensionais ndarray também.

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

O resultado é o seguinte -

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

O fatiamento também pode incluir reticências (...) para fazer uma tupla de seleção do mesmo comprimento que a dimensão de uma matriz. Se reticências forem usadas na posição da linha, ele retornará um ndarray composto de itens em linhas.

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

O resultado deste programa é o seguinte -

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