HOWTO · NumPy
Converter array 3D em array 2D em Python
A função reshape() do pacote NumPy pode ser usada para converter um array 3D em um array 2D em Python.
Nesta página
Use a operação numpy.reshape() do NumPy para converter um array 3D em um array 2D, preservando seus valores. Escolha uma forma 2D cujas dimensões, multiplicadas, resultem no mesmo número de elementos da entrada. Para um array com forma (4, 2, 2), remodelá-lo para (4, 4) mantém cada grupo do primeiro eixo em uma linha e combina os outros dois eixos nas colunas. O agrupamento adequado depende de como os dados devem ser interpretados.
Entendendo as formas de arrays 3D
Um array 3D do NumPy tem três eixos, e arr.shape informa o comprimento de cada eixo em uma tupla. Os eixos não representam necessariamente profundidade, altura e largura; o significado depende dos dados. Por exemplo, um array de imagem pode usar os eixos de altura, largura e canal de cor, enquanto uma simulação pode usar tempo, linha e coluna. Antes de remodelar o array, decida quais dimensões devem se tornar linhas e quais devem ser combinadas em colunas. A remodelagem altera a organização dos eixos, mas não os valores.
Converter um array 3D com numpy.reshape()
Chame reshape() com uma tupla que contenha o número desejado de linhas e colunas. Este exemplo cria os valores de 0 a 15, organiza-os em um array (4, 2, 2) e agrupa cada par de eixos finais em quatro colunas.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import numpy as np
arr = np.arange(16).reshape(4, 2, 2)
arr_2d = arr.reshape(4, 4)
print("Input shape:", arr.shape)
print("Output shape:", arr_2d.shape)
print(arr_2d)
Input shape: (4, 2, 2)
Output shape: (4, 4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
A forma de destino (4, 4) representa quatro linhas e quatro colunas. O NumPy mantém os valores na ordem de indexação selecionada, de modo que as novas linhas agrupam os valores originais conforme os eixos escolhidos. Use outra forma de destino se a tarefa exigir um agrupamento diferente; não existe um único layout 2D adequado para todos os conjuntos de dados 3D.
Derivar a forma 2D a partir do array de entrada
Quando as dimensões variam, leia-as de arr.shape em vez de fixá-las no código. Se a forma da entrada for (a, b, c) e cada fatia do primeiro eixo deva se tornar uma linha, a forma da saída será (a, b * c). No código, defina rows, height, width = arr.shape e use arr.reshape(rows, height * width). Assim, o primeiro eixo é mantido e o segundo e o terceiro são combinados. Se as linhas desejadas corresponderem a outro eixo, reorganize ou transponha os eixos primeiro e, em seguida, escolha uma forma de saída que corresponda a essa interpretação.
Você também pode pedir ao NumPy que deduza uma dimensão escrevendo -1, por exemplo, em arr.reshape(arr.shape[0], -1). O NumPy calcula essa dimensão com base no número de elementos e nas outras dimensões especificadas. Use apenas uma dimensão inferida para que a forma de destino não seja ambígua.
Ordem dos elementos: estilos C e Fortran
Por padrão, reshape() usa a ordem de indexação no estilo C. Isso significa que o NumPy percorre o último eixo mais rapidamente ao ler os valores da entrada e colocá-los no resultado. Passe order='F' para usar a ordem de indexação no estilo Fortran, em que o primeiro eixo varia mais rapidamente. O argumento order controla a sequência de indexação usada na remodelagem; por si só, ele não garante um layout físico específico na memória. Na maioria das conversões, o padrão é suficiente. Escolha a ordem Fortran somente quando a sequência de valores no resultado precisar seguir essa convenção.
Compatibilidade de formas e erros comuns
O produto das dimensões da entrada deve ser igual ao produto das dimensões solicitadas para a saída. Uma entrada (4, 2, 2) tem 16 elementos; portanto, (4, 4) ou (2, 8) podem conter os mesmos valores, enquanto (4, 5) não pode. Se a forma solicitada tiver uma quantidade incompatível de elementos, o NumPy gera ValueError. Ao investigar esse erro, confira arr.size ou calcule os produtos das dimensões. Confira também se o agrupamento escolhido para linhas e colunas corresponde ao significado dos dados: uma forma pode ser matematicamente compatível e ainda organizar os valores de um modo inadequado para a próxima operação.
Consulte os parâmetros e o comportamento da função na documentação oficial da API reshape do NumPy.