Forma da matriz com NumPy
A forma da matriz é definida pelo numero de elementos de cada dimensão. Para saber qual é a forma de uma matriz podemos utilizar o atributo shape dos objetos numpy. O atributo shape retorna uma tupla com o numero de dimensões da matriz e o numero de elementos em cada dimensão. Se o numero de elementos for diferente em cada dimensão a tupla só retorna o numero de dimensões.
Exemplo
Nesse exemplo o resultado é uma tupla com os valores dois e três. O primeiro valor (2) se refere ao numero de dimensões da matriz. E o segundo número (3) se refere ao número de elementos de cada matriz. Lembre-se que se os números de elementos em cada matriz for diferente o valor de shape só terá um numero, o de dimensões.
import numpy as np
matriz = np.array([[1, 2, 3], [9, 8, 7]])
print(matriz.shape)
matriz = np.array([[1, 2, 3], [9, 8, 7]])
print(matriz.shape)
Mais dimensões
Vamos entender melhor o funcionamento do atributo shape criando uma matriz mais complexa com cinco dimensões.
Exemplo
O resultado desse exemplo será uma tupla com cinco números referentes ao números de dimensões e ao número de elementos em cada matriz (o último). Os primeiros três números têm o valor um. Porque esse é o numero de dimensões nessas dimensões (uma dimensão). O quarto numero se refere a dimensão com duas dimensões por isso o seu valor é dois. E o último numero se refere ao numero de elementos em cada dimensão.
import numpy as np
matriz = np.array([[1, 2, 3], [9, 8, 7]], ndmin=5)
print(matriz)
print('Forma da matriz: ', matriz.shape)
matriz = np.array([[1, 2, 3], [9, 8, 7]], ndmin=5)
print(matriz)
print('Forma da matriz: ', matriz.shape)
Alterando a forma de uma matriz
Alterar a forma de uma matriz é transformá-la em uma matriz com o numero de dimensões diferente. Os elementos da matriz ficaram intactos, apenas a forma como eles estão dispostos na matriz é que vai mudar.1D para 2D
Vamos pegar uma matriz com uma dimensão e alterar a sua forma para duas dimensões. Por exemplo, vamos pegar uma matriz de uma dimensão com oito elementos e transformá-la numa matriz com duas dimensões e com quarto elementos a dimensão mais interna. Isso será feito com o método reshape.
Exemplo
O primeiro argumento do método reshape é o numero de matrizes desejada e o segundo o numero de elementos em cada matriz. É importante lembrar que a divisão deve ser exata. Caso contrario o erro ValueError vai ser lançado.
import numpy as np
matriz = np.array([1, 2, 3, 4, 5, 6, 7, 8])
nova_matriz = matriz.reshape(2, 4)
print(nova_matriz)
matriz = np.array([1, 2, 3, 4, 5, 6, 7, 8])
nova_matriz = matriz.reshape(2, 4)
print(nova_matriz)
1D para 3D
Para remodelar uma matriz com uma dimensão para uma de três, também utilizamos o método reshape. A única diferença é o numero de argumentos passado para a função.
Exemplo
Fica mais fácil entender se você imaginar que o primeiro argumento divide a matriz ao meio no eixo x. O segundo argumento divide as duas matriz ao meio no eixo y. E o terceiro argumento colocas essas duas matriz (com três matrizes cada) uma atrás da outra. Assim você tem uma matriz com três dimensões.
import numpy as np
matriz = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
nova_matriz = matriz.reshape(2, 3, 2)
print(nova_matriz)
matriz = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
nova_matriz = matriz.reshape(2, 3, 2)
print(nova_matriz)
Copia ou visualização
O método reshape não retorna uma nova matriz com o numero desejado de dimensões. Ele apenas da uma visualização da matriz com uma outra forma.
Exemplo
Nesse exemplo se o objeto nova_matriz fosse uma cópia da matriz o valor do atributo base seria None.
import numpy as np
matriz = np.array([1, 2, 3, 4, 5, 6, 7, 8])
nova_matriz = matriz.reshape(2, 4)
print(nova_matriz)
print(nova_matriz.base)
matriz = np.array([1, 2, 3, 4, 5, 6, 7, 8])
nova_matriz = matriz.reshape(2, 4)
print(nova_matriz)
print(nova_matriz.base)
3D, 2D para 1D
O processo de transformar matriz 1D para 2D e 3D pode seguir o caminho inverso. Fazer isso com o método reshape é muito fácil. Basta passar como argumento o numero menos um. Assim teremos uma visualização da matriz 3D, 2D em 1D.
Exemplo
Lembre-se que o método reshape não altera a matriz apenas retorna uma visualização dela com um numero diferente de dimensões.
import numpy as np
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print(matriz.reshape(-1))
matriz = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(matriz.reshape(-1))
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print(matriz.reshape(-1))
matriz = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(matriz.reshape(-1))
0 comentários:
Postar um comentário