segunda-feira, 13 de abril de 2020

Juntando arrays com Numpy

Juntando arrays com Numpy


Podemos juntar duas ou mais matriz usando o método concatenate. O método concatenate recebe dois parâmetros. O primeiro é uma tupla com as matrizes que se deseja mesclar. E o segundo é o eixo. Se não for atribuído um valor para o parâmetro eixo o seu valor padrão é zero. Então a função concatenate retornará uma matriz com uma dimensão. Se for passado o valor um, a função retornará uma matriz com duas dimensões.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([5, 6, 7])

# padrão axis=0
matriz = np.concatenate((array1, array2))

print(matriz)
Juntando duas matrizes 2D.
Exemplo
import numpy as np

array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

matriz = np.concatenate((array1, array2), axis=1)

print(matriz)
Repare que o numero passado ao parâmetro axis define em quantas pastes cada matriz vai ser dividida. Nesse exemplo, passamos duas matrizes com duas dimensões cada, e passamos o valor um ao parâmetro axis. Assim as duas dimensões da array1 vão ser mescladas em um eixo, transformando a array1 numa matriz com uma dimensão. O mesmo acontece com a array2. Se, nesse exemplo, passássemos o valor zero (zero eixos) o resultado da função concatenate seria uma matriz com duas dimensões com quatro linhas e duas colunas. Passando o valor um o resultado seria uma matriz com duas linhas e quatro colunas. A mesma lógica se aplica quando passamos matrizes com três dimensões.
Exemplo
import numpy as np

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

print('axis=0')
matriz = np.concatenate((array1, array2))
print(matriz)
print('axis=1')
matriz = np.concatenate((array1, array2), axis=1)
print(matriz)
print('axis=2')
matriz = np.concatenate((array1, array2), axis=2)
print(matriz)
Lembre-se que a função concatenate só funciona com matrizes com o mesmo numero de dimensões. Se for passado uma matriz com o numero de dimensões diferente das outras um erro será lançado.

Juntando matrizes com a função stack

A função stack empilhar os elementos de uma matriz, um em cima do outro, de acordo com o eixo passado para a função como argumento. A função concatenate junta as matrizes na horizontal e a função stack junta os elementos da matriz na horizontal.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

print('Função stack: Vertical')
matriz = np.stack((array1, array2), axis=1)
print(matriz)

print('Função concatenate: Horizontal')
matriz = np.concatenate((array1, array2))
print(matriz)

Juntando matrizes com a função hstack

Se você quiser empilhar os elementos da matriz por linha a função hstack pode ser útil.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

array3 = np.array([[1, 2, 3], [4, 5, 6]])
array4 = np.array([[7, 8, 9], [10, 11, 12]])

print('Matrizes com uma dimensão')
matriz = np.hstack((array1, array2))
print(matriz)

print('Matrizes com duas dimensões')
matriz = np.hstack((array3, array4))
print(matriz)

Juntando matrizes com a função vstack

Para empilhar os elementos das matrizes por coluna a função é a vstack.
Exemplo
import numpy as np

array1 = np.array([[1, 2, 3], [4, 5, 6]])
array2 = np.array([[7, 8, 9], [10, 11, 12]])

matriz = np.vstack((array1, array2))
print(matriz)

Juntando matrizes com a função dstack

A função dstack mescla os elementos da array por profundidade (eixo z). Por isso ela retorna uma array com três dimensões.
Exemplo
import numpy as np

array1 = np.array([1, 2, 3])

array2 = np.array([4, 5, 6])

matriz = np.dstack((array1, array2))
print(matriz)
print(matriz.ndim)
Para ficar mais claro tente passar para as funções concatenate, stack, hstack, vstack e dstack matrizes com diferentes números de dimensões.

0 comentários:

Postar um comentário