5 min de leitura
#8 - Trabalhando com Indices e Fatiamento no NumPy
Neste capítulo, aprenderemos como trabalhar com índices e fatiamento de matrizes no NumPy.
O conteúdo do objeto ndarray pode ser acessado e modificado por via da indexação ou fatiamento, do mesmo jeito que a linguagem Python acessa o conteúdo dos objetos por padrão.
Como mencionado anteriormente, os itens no objeto ndarray seguem o índice baseado em zero. Estão disponíveis três tipos de métodos de indexação - acesso ao campo, fatiamento básico e indexação avançada.
Fatiamento básico é uma extensão do conceito básico de fatiar do Python para n dimensões. Um objeto de fatia do Python é construído fornecendo parâmetros de start, stop e step para a função slice. Este objeto de fatiamento é 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]
Sua saída é a seguinte -
[2 4 6]
No exemplo acima, um objeto ndarray é preparado pela função arange(). Em seguida, um objeto de fatiamento é definido com os valores de start, stop e step 2, 7 e 2, respectivamente. Quando esse objeto de fatiamento é passado para o ndarray, o conteudo do objeto partirá no índice 2 até 7 e pula 2.
O mesmo resultado também pode ser obtido fornecendo os parâmetros de fatia separados por dois pontos:(start: stop: step) diretamente para o objeto ndarray .
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 a: for inserido na frente, 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 (não incluindo o índice de parada) com a step padrão 1 serão fatiados.
Exemplo 3
# fatiar um único item
import numpy as np
a = np.arange(10)
b = a[5]
print b
Sua saída é a seguinte -
5
Exemplo 4
# fatiar itens começando por um índice
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
# fatiar itens entre índices
import numpy as np
a = np.arange(10)
print a[2:5]
Aqui, a saída seria -
[2 3 4]
A descrição acima também se aplica ao ndarray multidimensional.
Exemplo 6
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print a
# fatiar itens começando por um índice
print 'Agora vamos cortar a matriz do índice a[1:]'
print a[1:]
A saída é a seguinte -
[[1 2 3]
[3 4 5]
[4 5 6]]
Agora vamos cortar a matriz do índice 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 nas linhas.
Exemplo 7
# iniciando uma matriz
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print 'Nossa matriz é:'
print a
print '\n'
# esta retorna uma matriz de itens da segunda coluna
print 'Os itens na segunda coluna são:'
print a[...,1]
print '\n'
# Agora iremos fatiar todos os itens da segunda linha
print 'Os itens na segunda linha são:'
print a[1,...]
print '\n'
# Agora iremos fatiar todos as itens da coluna 1 adiante
print 'Os itens da coluna 1 em diante são:'
print a[...,1:]
A saída deste programa é a seguinte -
Nossa matriz é:
[[1 2 3]
[3 4 5]
[4 5 6]]
Os itens na segunda coluna são:
[2 4 5]
Os itens na segunda linha são:
[3 4 5]
Os itens da coluna 1 em diante são:
[[2 3]
[4 5]
[5 6]]
Fonte traduzida com adaptações: NumPy - Indexing & Slicing
Comentários