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].
In [9]:
import numpy as np
a = np.arange(20) # a é um vetor de dimensão 20
print('a = \n', a)
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])
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)')
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')
É 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] |
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')
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')
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')
In [16]:
a = np.arange(20)
print('Resultado da operação a[:]')
print(a[:])
print('Todos os elementos com passo unitário')
In [ ]: