Transposição e Reshaping NumPy

Alguns tantos exemplos para facilitar sua compreensão

Vejamos agora como mudar o formato do nosso objeto unidimensional ou bidimensional através de um material de referência com os conceitos de Transposição e Reshaping de Arrays.

Notebook de estudo

Acesse o Jupyter Notebook para consultar os conceitos que serão abordados sobre Slicing e Fatiamento.

# Importando o módulo Numpy
import numpy as np

Criar array multi-dimensional

array1 = np.array([[65, 23, 19], [41, 87, 10]]); array1array([[65, 23, 19],
[41, 87, 10]]
)

Transposição de arrays

Aqui podemos fazer uma pequena inversão. Podemos transformar o que é linha em coluna e o que é coluna em linha. Se você já trabalhou com Business Intelligence, com certeza já ouviu falar em Pivot, ou seja, pivoteamos os dados e olhamos para os dados sob uma outra perspectiva.

O atributo .T permite realizar a transposição e com isso executar o pivô, um conceito bastante comum em BI

array1.T #Pivotear dados, transposearray([[65, 41],
[23, 87],
[19, 10]
])

Caso não deseje usar o atributo .T, podemos usar a função transpose.

np.transpose(array1)array([[65, 41],
[23, 87],
[19, 10]]
)

Broadcasting

A caráter de exemplo, criamos o array2, fizemos a sua transposta, somamos o array2 à sua transposta, resultando no Broadcasting.

Estamos basicamente somando os valores do array, um conceito da matemática, o broadcasting, espalhando melhor os dados de acordo com a soma entre um array e a sua transposta.

array2 = np.array([[33, 34, 35]])array2.Tarray([[33],
[34],
[35]]
)
array2.T + array2array([[66, 67, 68],
[67, 68, 69],
[68, 69, 70]]
)

Transformar Matrizes em Vetores

Vamos criar outro array, um array multidimensional, especificamente duas dimensões. Temos duas linhas e 5 colunas para esse array3. Portanto, podemos definar essa estrutura de dados como Matriz.

array3 = np.array([np.arange(1,6), np.arange(10,15)]); array3array([[1, 2, 3, 4, 5],
[10, 11, 12, 13, 14]])

ravel

Agora vamos transformar essa matriz em vetor, traformar uma matriz bidimensional em um objeto unidimensional.

Para que você possa compreender a importância dessa função, quando trabalhamos com Inteligência Artificial e Visão Computacional, você tem uma imagem — matriz de pixels com valores numéricos. Pegamos essa matriz e aplicamos a função ravel, para transformar a matriz da imagem em apenas um vetor, ou seja, um objeto unidimensional.

array3.ravel() 
array([1, 2, 3, 4, 5, 10, 11, 12, 13, 14])

Portanto, não trabalhamos com objetos bidimensionais na maioria dos casos. Pegamos as matrizes, convertemos em unidimensional e realizamos o processo de análise.

Podemos ainda, aplicar a transposição e converter para unidimensional:

array3.T.ravel() 
array([1, 10, 2, 11, 3, 12, 4, 13, 5, 14])

Operadores Lógicos

Podemos trabalhar também com operadores lógicos.

Primeiramente, definimos um seed para que possamos reproduzir os mesmos resultados desse estudo. Em seguida, criar uma matriz 4x4, com elementos de 1 a 10 e que serão randomizados dentro dessa matriz:

np.random.seed(100)array4 = np.random.randint(1, 10, size = (4,4)); array4array([[9, 9, 4, 8],
[8, 1, 5, 3],
[6, 3, 3, 3],
[2, 1, 9, 5]]
)

np.any

Vamos chamar a função any, é uma função que retorna qualquer coisa baseada em uma regra.

Queremos saber se existe qualquer elemento dentro do array4 criado acima, onde qualquer elemento dividido por 7 seja igual a 0. Ou seja, o símbolo de % é o resto da divisão.

Então, cada elemento do array dividido por 7, tem o resto igual a 0? Se tiver, retornar verdadeiro.

np.any((array4 % 7) == 0)False

Temos False porque nenhum dos elementos da matriz divididos por 7 é igual a 0. Podemos utilizar esse recurso de any para verificar, por exemplo, se temos valores missing, ou números com determinada regra dentro do conjunto de dados, uma infinidade de possibilidades.

Logo, somos capazes de verificar nos dados, utilizando os operadores lógicos.

np.all

np.all(array4 < 11)
True

A função all é diferente da any. A função any pergunta se temos qualquer elemento de acordo com a regra entre parênteses.

A função all pergunta se temos todos os elementos de acordo com a regra, ou seja, todos os elementos do array4 são menores do que 11? True.

Reshaping

Podemos ainda fazer o reshaping com a própria função reshape. Vamos criar o array5 e mudar o shape desse array

array5 = np.arange(1,16); array5
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])

Transformar um objeto unidimensional em multi-dimensional com reshape:

array5.reshape(3, 5) array([[ 1,  2,  3,  4,  5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]]
)

Ordenar o Array

Podemos ainda ordenar os elementos de um Array.

array7 = np.array([[3,2],[10,-1]])
array7
array([[ 3, 2],
[10, -1]]
)

Ordenar por linha

A função sort significa ordenar em português. Passamos como parâmetro para essa função, axis = 1, ordenação no sentido da linha.

# Ordenar por linha
array7.sort(axis = 1); array7
array([[ 2, 3], # ordenada do menor maior
[-1, 10]]
) # ordenada do menor maior

Ordernar por coluna

Aqui criamos o array8 e aplicamos a ordenação no sentido da coluna, mudando o parâmetro de axis=1 para 0.

array8 = np.array([[3,2],[10,-1]]); array8array([[ 3,  2],
[10, -1]]
)
array8.sort(axis = 0)
array8
array([[ 3, -1],
[10, 2]]
)

Isso nos dá uma série de possibilidades para mudar o formato (shape) do conjunto de dados, fatiar o conjunto, buscar elementos dentro do conjunto com base em uma regra específica, tudo isso será muito útil durante as fases de pré-processamento.

Obrigado.

Composing a repository of books (i bought), authors (i follow) & blogs (direct ones) for my own understanding.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store