Indexação e Fatiamento em NumPy

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, abordaremos os conceitos de Indexação (Indexing) e Fatiamento (Slicing) na biblioteca NumPy do Python. Aprenderemos como acessar, modificar e extrair uma faixa de elementos de um array. Diferentes métodos de Indexação na biblioteca NumPy também serão explicados e demonstrados usando exemplos.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Entendendo os Fundamentos

  • Em um array NumPy, o fatiamento (slicing) é basicamente a maneira de extrair uma faixa de elementos de um array.
  • Os itens no objeto ndarray sempre seguem a indexação baseada em zero.
  • Para acessar e modificar o conteúdo do objeto ndarray na biblioteca NumPy, a indexação (indexing) ou o fatiamento (slicing) podem ser realizados da mesma forma que no objeto container embutido do Python.

Fatiamento de Arrays NumPy

  • O fatiamento (slicing) em um array é realizado da mesma forma que em uma lista Python.
  • Se um array tiver 100 elementos e você quiser selecionar apenas uma seção dos valores, você pode realizar o fatiamento (slicing) e extrair o conjunto de valores desejado do ndarray completo.
  • Aprenda sobre o fatiamento (slicing) de listas Python e você poderá aplicar o mesmo em ndarrays NumPy.

Indexação de Arrays NumPy

  • Existem três tipos de métodos de indexação (indexing) disponíveis na biblioteca NumPy:
    • Acesso ao campo (Field access) - Este é o acesso direto ao campo usando o índice do valor.
    • Fatiamento Básico (Basic Slicing) - O fatiamento básico (basic slicing) é simplesmente uma extensão do conceito básico de fatiamento (slicing) do Python para n-dimensões.
    • Indexação Avançada (Advanced Indexing) (não coberto neste laboratório)

Exemplos

  • Vamos analisar alguns exemplos para obter uma melhor compreensão desses conceitos.

Exemplo 1 - Fatiamento de Ndarray

import numpy as np

a = np.arange(10)
print("O ndarray é:")
print(a)

s = slice(2,7,2)
print("Após aplicar a função slice():")
print (a[s])
  • O código acima prepara um objeto ndarray usando a função arange().
  • Um objeto slice é definido com os valores de início (start), parada (stop) e passo (step) 2, 7 e 2, respectivamente.
  • Depois disso, este objeto slice é passado para o ndarray. Uma parte dele que começa com o índice 2 até 7 com um valor de passo de 2 será fatiada.

Exemplo 2 - Fatiando um Único Item

import numpy as np

a = np.arange(15)
print("O array é:")
print(a)

## using the index directly
b = a[7]
print("O oitavo item no array é:")
print (b)
  • O código acima fatia um único item do objeto ndarray.
  • Fatiar um único array pode ser alcançado muito facilmente usando indexação.

Exemplo 3

import numpy as np

a = np.arange(20)
print("O array é:")
print(a)

print("Fatiamento de itens começando do índice:")
print(a[2:])
  • O código acima fatia os itens começando de um índice dado até o último índice ou o último elemento.

Exemplo 4

import numpy as np

a = np.arange(20)
print("O array é:")
print(a)

print("Fatiamento de itens entre dois índices dados:")
print(a[2:8])
  • O código acima fatia todos os itens entre dois índices dados.
  • Ele exclui o valor no índice final.

Usando Elipse

  • Ao fatiar, ellipsis (...) é usado para criar uma tupla de seleção do mesmo comprimento que a dimensão de um array.
  • Para um ndarray multidimensional, se a ellipsis for usada na posição da linha, ela retornará um ndarray composto por itens nas linhas e, similarmente, para as colunas.
import numpy as np
a = np.array([[11,2,23],[33,44,5],[84,25,16]])

print ("The array is :")
print (a )
print ('\n')

#To return array of items in the second column
print ('The items in the second column are:')
print (a[..., 1] )
print ('\n')

## In order to slice all items from the second row
print ('The items in the second row are:')
print (a[1, ...])
print ('\n')

## In order to slice all items from column 1 onwards
print ('The items onwards to column 1 are:' )
print (a[..., 1:])

Resumo

Neste laboratório, cobrimos o conceito de Indexação (Indexing) e Fatiamento (Slicing) na biblioteca Numpy. Aprendemos diferentes métodos de indexação na biblioteca Numpy e vários métodos de fatiamento de arrays. Também vimos exemplos demonstrando a implementação prática desses conceitos.