Array Shape & Reshape em NUMPY

Nesta postagem, vamos nos aprofundar nos detalhes da forma e remodelagem do array NumPy , cobrindo os fundamentos da remodelação de arrays Numpy e o uso da função reshape() para alterar a forma de um array.

Forma de Matriz NumPy

A forma de uma matriz refere-se ao número de elementos ao longo de cada dimensão da matriz.

As matrizes Numpy podem ter uma ou mais dimensões, e a forma de uma matriz é representada como uma tupla de inteiros, onde cada inteiro representa o tamanho de uma matriz ao longo de uma dimensão específica.

Compreender a forma de uma matriz é crucial para manipular e processar dados com eficiência no Numpy , bem como para selecionar e fatiar elementos de matrizes.

Nesta seção do artigo, exploraremos o conceito de formato de array e como acessar e modificar o formato de array Numpy .



Obter forma de matriz NumPY

No formato Numpy Array , os arrays Numpy possuem um atributo conhecido como shape que fornece uma tupla com o número de itens para cada índice.

A forma de uma matriz 2-D pode ser exibida da seguinte forma:

NumPy Array Shape Example: 1 

1
2
3
4
5
6
import numpy as npy
mrx_arr = npy.array([[0, 2, 4, 6, 8, 10],
[1, 3, 5, 7, 9, 11]])
print(mrx_arr.shape)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Conforme o exemplo acima, retornamos (2, 6), que indica que o array possui duas dimensões, e cada dimensão possui seis itens.

Uma forma de matriz 3D pode ser representada da seguinte forma:

NumPy Array Shape Example: 2 

1
2
3
4
5
import numpy as npy
mrx_arr = npy.array([[["New York City", "Los Angeles", "Chicago"], ["Houston", "Phoenix ", "Philadelphia"]], [["San Antonio", "San Antonio", "Dallas "], ["San Jose", "Austin, TX", "Jacksonville, FLA"]]])
print(mrx_arr.shape)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

No exemplo acima, indica que o array possui três dimensões, e cada dimensão possui três itens.

Com ndmin, gere um array de 9 dimensões com os elementos 2, 3, 5, 7, 11, 13, 17, 19 e certifique-se de que a dimensão final tenha o valor 8:

NumPy Array Shape Example: 3 

1
2
3
4
5
6
import numpy as npy
prime_arr = npy.array([2, 3, 5, 7, 11, 13, 17, 19], ndmin=9)
print(prime_arr)
print('Array Shape:', prime_arr.shape)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Utilizando ndmin, construa uma matriz de 6 dimensões com os componentes B, C, D, F, G, H e certifique-se de que a última dimensão seja 6:

NumPy Array Shape Example: 4 

1
2
3
4
5
6
import numpy as npy
consonants_arr = npy.array(['B', 'C', 'D', 'F', 'G', 'H'], ndmin=6)
print(consonants_arr)
print('Array Shape:', consonants_arr.shape)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Como funciona a tupla de forma?

A tupla de forma em Numpy representa as dimensões de uma matriz, com cada inteiro na tupla indicando o tamanho da dimensão correspondente .

Em outras palavras, números inteiros em cada índice nos dizem quantos itens existem na respectiva dimensão.

De acordo com o exemplo acima, o índice-6 tem valor 6, então a 6ª (5 + 1) dimensão tem 6 componentes.

Observação: é importante observar que a tupla de forma é simplesmente uma propriedade do array Numpy e não controla o tamanho real do array.
Lembre-se: o tamanho de uma matriz é determinado pelo número de elementos contidos na matriz, enquanto a forma de uma matriz determina como esses elementos são organizados ao longo de cada dimensão.

Remodelagem da Matriz NumPy

Nesta seção do artigo, exploramos a reformulação do array Numpy com exemplos na expectativa de cumprir os objetivos de aprendizado.

A função reshape() no Numpy é usada para alterar a forma de uma matriz, permitindo uma representação flexível dos dados.

Essa função recebe dois argumentos: o primeiro argumento é a matriz que você deseja remodelar e o segundo argumento é a forma desejada, que é especificada como uma tupla.

Remodelar uma matriz

A reformulação da matriz Numpy é o processo de alterar a forma de uma matriz.

É o número de itens em cada dimensão que define a forma de uma matriz.

O usuário pode inserir ou excluir dimensões ou modificar o número de itens em cada dimensão remodelando.

Lembre-se: A função reshape() retorna um novo array com a forma especificada e não modifica o array original. Se o número de elementos na matriz original não for igual ao número de elementos na nova forma, a função reshape() gerará um ValueError.

Remodelar de 1-D para 2-D

As matrizes 1-D a seguir têm 7 componentes. Transforme-o em uma matriz 2-D.

Example: 

1
2
3
4
5
6
import numpy as npy
factorial_arr = npy.array([1, 2, 6, 24, 120, 720, 5040, 40320])
mrx_arr = factorial_arr.reshape(2, 4)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

No exemplo acima, primeiro importamos a biblioteca Numpy como npy por conveniência. Em seguida, criamos um array Numpy unidimensional chamado fatorial_arr que contém os valores dos fatoriais de 1 a 8.

Em seguida, usamos a função reshape() no array factorial_arr para alterar sua forma de ( 8, ) para ( 2, 4 ). Esta função retorna um novo array com a forma desejada, que é armazenado em uma nova variável chamada mrx_arr.

Por fim, imprimimos o array mrx_arr usando a função print() . A saída desse código seria:

array([[    1,     2,     6,    24],
       [  120,   720,  5040, 40320]])  

Como podemos ver, o array mrx_arr foi reformulado em um array bidimensional com 2 linhas e 4 colunas.

Os elementos da matriz fatorial_arr original são reorganizados na nova matriz para corresponder à forma desejada ( 2, 4 ).

Another Example: 

1
2
3
4
5
6
import numpy as npy
palindrome_arr = npy.array(["wow", "peep", "rotator", "noon", "deed", "Madam ", "Civic", "Level"])
mrx_arr = palindrome_arr.reshape(2, 4)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Remodelar de 1-D para 3-D

O código abaixo produziria a seguinte matriz remodelada tridimensional da matriz unidimensional original:

Example: 

1
2
3
4
5
6
import numpy as npy
factorial_arr = npy.array([1, 2, 6, 24, 120, 720, 5040, 40320])
mrx_arr = factorial_arr.reshape(2, 2, 2)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Example: 

1
2
3
4
5
6
import numpy as npy
palindrome_arr = npy.array(["wow", "peep", "rotator", "noon", "deed", "Madam ", "Civic", "Level"])
mrx_arr = palindrome_arr.reshape(2, 2, 2)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Neste exemplo, criamos um array Numpy unidimensional chamado palindrome_arr que contém uma lista de palavras palíndromo.

Em seguida, usamos a função reshape() no array palindrome_arr para alterar sua forma de ( 8 ,) para ( 2 , 2 , 2 ).

Esta função retorna um novo array com a forma desejada, que é armazenado em uma nova variável chamada mrx_arr .

Por fim, imprimimos o array mrx_arr usando a função print() .


Que formas podemos remodelar?

Em nossa exploração da reformulação da matriz Numpy, ela funciona, desde que os itens necessários em ambas as formas sejam idênticos.

Em uma matriz 1D com 8 itens, podemos remodelá-la em uma matriz 2D com 4 itens em 2 linhas, mas não em uma matriz 3D com 3 itens em 3 linhas.

Você pode transformar uma matriz 1D com 8 componentes em uma matriz 2D com 3 itens em cada dimensão seguindo estas etapas:

Example: 

1
2
3
4
5
6
import numpy as npy
factorial_arr = npy.array([1, 2, 6, 24, 120, 720, 5040, 40320])
mrx_arr = factorial_arr.reshape(4, 3)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Example: 

1
2
3
4
5
6
mport numpy as npy
palindrome_arr = npy.array(["wow", "peep", "rotator", "noon", "deed", "Madam ", "Civic", "Level"])
mrx_arr = palindrome_arr.reshape(2, 6, 3)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Descubra se o array resultante é uma cópia ou uma visão:

Example: 

1
2
3
4
5
import numpy as npy
factorial_arr = npy.array([1, 2, 6, 24, 120, 720, 5040, 40320])
print(factorial_arr.reshape(4, 2).base)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

O código produziria o objeto base da matriz remodelada, que é o fatorial_arr unidimensional original:

Example: 

1
2
3
4
5
import numpy as npy
palindrome_arr = npy.array(["wow", "peep", "rotator", "noon", "deed", "Madam ", "Civic", "Level"])
print(palindrome_arr.reshape(4, 2).base)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

No código acima, o palindrome_arr unidimensional original seria gerado como o objeto base da matriz reformulada.

Dimensão Desconhecida

Uma dimensão desconhecida ” é permitida.

Como discutimos com a reformulação da matriz Numpy, você não precisa inserir um número preciso para uma das dimensões.

O NumPy calculará esse número se você inserir -1 como valor.

Para transformar um array 1D de 8 elementos em um array 3D 2×2, siga os exemplos abaixo:

Example: 

1
2
3
4
5
6
import numpy as npy
factorial_arr = npy.array([1, 2, 6, 24, 120, 720, 5040, 40320])
mrx_arr = factorial_arr.reshape(2, 2, -1)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Example: 

1
2
3
4
5
6
import numpy as npy
palindrome_arr = npy.array(["wow", "peep", "rotator", "noon", "deed", "Madam ", "Civic", "Level"])
mrx_arr = palindrome_arr.reshape(2, 2, -1)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lembrete: Não é possível aplicar -1 a mais de uma dimensão por vez.

Achatando matrizes

O achatamento de matriz é o processo de transformar uma matriz multidimensional em uma matriz unidimensional utilizando Numpy .

Para fazer isso, podemos usar reshape(-1).

Torne a matriz uma dimensão, transformando-a da seguinte maneira:

Example: 

1
2
3
4
5
6
import numpy as npy
evenOdd_arr = npy.array([[0, 2, 4, 6, 8 ,10], [1, 3, 5, 7, 9 , 11]])
mrx_arr = evenOdd_arr.reshape(-1)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Example: 

1
2
3
4
5
6
import numpy as npy
palindrome_arr = npy.array([["wow", "peep", "rotator", "noon"], ["deed", "Madam ", "Civic", "Level"]])
mrx_arr = palindrome_arr.reshape(-1)
print(mrx_arr)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lembrete: Numpy oferece muitas funções para alterar a forma de arrays flatten, ravel e também para reorganizar os itens rot90, flip, fliplr, flipud, etc. No numpy, eles são categorizados de Basic a Expert.
Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone