Slice 2D Array em NumPy

Muhammad Maisam Abbas 30 janeiro 2023
  1. Slice 2D Array com Array Indexing em NumPy
  2. Slice 2D Array com a função numpy.ix_() em NumPy
Slice 2D Array em NumPy

Este tutorial irá apresentar como fatiar um array 2D no NumPy.

Slice 2D Array com Array Indexing em NumPy

Se tivermos um array NumPy 2D principal e quisermos extrair outra submatriz 2D dela, podemos usar o método de indexação de array para esse propósito. Tomemos um array de forma 4*4 para este exemplo. É muito simples extrair o primeiro e o último elementos do array. Por exemplo, array[0:2,0:2] nos dará uma visão ou submatriz que contém os dois primeiros elementos dentro do array vertical e horizontalmente. Da mesma forma, array[2:,2:] nos dará uma visão ou submatriz que contém os dois últimos elementos dentro do array vertical e horizontalmente. O trabalho mais complexo é obter os elementos de diferentes linhas e colunas, pulando uma linha ou coluna do meio. O exemplo de código a seguir nos mostra exatamente como fazer isso com a indexação de array em Python.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[[[0], [2]], [1, 3]]
print(y)

Resultado:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

No código acima, extraímos os elementos nas linhas 1 e 3 que se cruzam com as colunas 1 e 3, enquanto pulamos as linhas 2 e 2 com o método de indexação de array em Python. Isso também pode ser feito com uma abordagem semelhante, mas com alguma sintaxe diferente, conforme mostrado no exemplo de codificação abaixo.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[0::2, 1::2]
print(y)

Resultado:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

No código acima, também extraímos os elementos nas linhas 1 e 3 que se cruzam com as colunas 1 e 3, enquanto pulamos as linhas 2 e 2 com o método de indexação de array em Python. Este método é mais fácil do que a abordagem anterior porque não envolve muitos colchetes e é, em geral, mais legível.

Slice 2D Array com a função numpy.ix_() em NumPy

A função numpy.ix_() forma uma sequência de elementos em malha aberta em Python. Esta função pega n arrays 1D e retorna um array nD. Podemos usar esta função para extrair fatias 1D individuais de nossa matriz principal e, em seguida, combiná-las para formar um array 2D. O exemplo de código a seguir faz o mesmo trabalho que os exemplos anteriores, mas usando a função numpy.ix_() com indexação de array em Python.

import numpy as np

x = range(16)

x = np.reshape(x, (4, 4))
print(x)

y = x[np.ix_([0, 2], [1, 3])]
print(y)

Resultado:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

No código acima, basicamente fizemos exatamente a mesma coisa que nos exemplos anteriores, mas usando a função np.ix_() junto com a indexação de array em Python.

A ideia principal por trás de todos esses exemplos é a mesma. Quando criamos nosso array principal, um buffer foi alocado para ele dependendo de sua forma e tamanho. O método de indexação de array cria um novo objeto do tipo de dados de array que aponta para o buffer de memória de nossa matriz principal. Em todos os exemplos acima, embora y seja um novo array, ele não ocupa nenhum buffer na memória. Ele apenas aponta para determinados locais no buffer de memória do array x. Isso é o que torna o método de indexação de array melhor do que apenas criar um novo array.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn