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