Fatiamento em narray unidimensional

Um recurso importante do numpy é o fatiamento no qual é possível acessar um subconjunto do array de diversas formas. O fatiamento define os índices onde o array será acessado definindo o ponto inicial, final e o passo entre eles, nesta ordem: [inicial:final:passo].

Inicializando um array unidimensional


In [9]:
import numpy as np

a = np.arange(20) # a é um vetor de dimensão 20
print('a = \n', a)


a = 
 [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

Exemplo simples de fatiamento

Para a realização do fatiamento são utilizados 3 parâmetros, colocados no local do índice do array. Os 3 parâmetros são separados por dois pontos ":". Todos os 3 parâmetros podem ser opcionais que ocorrem quando o valor inicial é 0, o valor final é o tamanho do array e o passo é 1. Lembrar que a ordem deles é: [inicial:final:passo]. Se o passo for 1 fica: [inicial:final]. Se o início for 0 fica: [:final] e se o final for o último fica: [inicio:] e se forem todos [:].

O fatiamento é feito começando pelo primeiro valor, adicionando-se o passo até antes do último valor. Três aspectos são extremamente importantes de serem lembrados: O índice inicial começa em zero, o índice final nunca é atingido, o último índice utilizado é sempre o imediatamente anterior e o Numpy admite índices negativos, que é uma indexação do último (-1) até o primeiro elemento (-W).

Os exemplos a seguir ajudam a fixar estes conceitos.

O código abaixo acessa os elementos ímpares começando de 1 até 14:


In [10]:
a = np.arange(20)
print('Resultado da operação a[1:15:2]')
print(a[1:15:2])


Resultado da operação a[1:15:2]
[ 1  3  5  7  9 11 13]

Exemplo de fatiamento com indices negativos

Acessando o último elemento com índice negativo

O código abaixo acessa os elementos ímpares até antes do último elemento:


In [11]:
a = np.arange(20)
print('Resultado da operação a[1:-1:2]')
print(a[1:-1:2])
print('Note que o fatiamento termina antes do último elemento (-1)')


Resultado da operação a[1:-1:2]
[ 1  3  5  7  9 11 13 15 17]
Note que o fatiamento termina antes do último elemento (-1)

Inversão do array com step negativo (step = -1)


In [12]:
a = np.arange(20)
print('Resultado da operação a[-3:2:-1]')
print(a[-3:2:-1])
print('Note que o fatiamento retorna o array invertido')
print('Antepenúltimo até o terceiro elemento com step = -1')


Resultado da operação a[-3:2:-1]
[17 16 15 14 13 12 11 10  9  8  7  6  5  4  3]
Note que o fatiamento retorna o array invertido
Antepenúltimo até o terceiro elemento com step = -1

Fatiamento avançado

É possível realizar o fatiamento utilizando os 3 parâmetros explícitos ( o limite inferior, limite superior e o step), ou podemos suprimir algum desses parâmetros. Nestes casos a função toma o valor defaut: limite inferior = primeiro elemento, limite superior = último elemento e step = 1.

É possível realizar o fatiamento utilizando os 3 parâmetros explícitos ( o limite inferior, limite superior e o step), ou podemos suprimir algum desses parâmetros. Nestes casos a função toma o valor defaut: limite inferior = primeiro elemento, limite superior = último elemento e step = 1.

Proposta inicial Equivalente
a[0:len(a):1] a[:]
a[0:10:1] a[:10]
a[0:10:2] a[:10:2]
a[2:len(a):1] a[2::]
a[2:len(a):2] a[2::2]

Supressão do indice limite inferior

Quando o índice do limite inferior é omitido, é subentendido que é 0:


In [13]:
a = np.arange(20)
print('Resultado da operação a[:15:2]')
print(a[:15:2])
print('Note que o fatiamento inicia do primeiro elemento')
print('Primeiro elemento até antes do 15o com passo duplo')


Resultado da operação a[:15:2]
[ 0  2  4  6  8 10 12 14]
Note que o fatiamento inicia do primeiro elemento
Primeiro elemento até antes do 15o com passo duplo

Supressão do indice limite superior

Quando o índice do limite superior é omitido, fica implícito que é o último elemento:


In [14]:
a = np.arange(20)
print('Resultado da operação a[1::2]')
print(a[1::2])
print('Note que o fatiamento termina último elemento')
print('Primeiro elemento até o último com passo duplo')


Resultado da operação a[1::2]
[ 1  3  5  7  9 11 13 15 17 19]
Note que o fatiamento termina último elemento
Primeiro elemento até o último com passo duplo

Supressão do indice do step

O índice do step é opcional e quando não é indicado, seu valor é 1:


In [15]:
a = np.arange(20)
print('Resultado da operação a[1:15]')
print(a[1:15])
print('Note que o fatiamento tem step unitário')
print('Primeiro elemento até antes do 15o com passo um')


Resultado da operação a[1:15]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14]
Note que o fatiamento tem step unitário
Primeiro elemento até antes do 15o com passo um

Todos os elementos com passo unitário


In [16]:
a = np.arange(20)
print('Resultado da operação a[:]')
print(a[:])
print('Todos os elementos com passo unitário')


Resultado da operação a[:]
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
Todos os elementos com passo unitário

Documentação Oficial Numpy

Scipy.org: indexação

Links Interessantes

Scipy Lectures: Indexação e fatiamento


In [ ]: