Manipular eficientemente formatos de arrays é fundamental para o processamento eficaz de dados com NumPy. Este tutorial aborda duas funções principais para reformar e redimensionar arrays NumPy: reshape()
e resize()
. Exploraremos suas funcionalidades, diferenças sutis e melhores práticas para garantir que você possa utilizá-las com confiança em seus projetos de ciência de dados.
Sumário
1. numpy.reshape()
A função numpy.reshape()
é uma ferramenta versátil para modificar o formato de um array NumPy sem alterar seus dados subjacentes. Requer o array e o novo formato desejado como entradas. Crucialmente, o novo formato deve ser compatível com o tamanho do array original (o número total de elementos deve permanecer inalterado).
import numpy as np
arr = np.arange(12) # Cria um array [0, 1, 2, ..., 11]
print("Array original:n", arr)
reshaped_arr = np.reshape(arr, (3, 4)) # Reformate para uma matriz 3x4
print("nArray reformado:n", reshaped_arr)
#Usando -1 para cálculo automático de dimensão
auto_reshape = np.reshape(arr, (-1, 3))
print("nArray auto-reformatado:n", auto_reshape)
#Tratamento de Erros para formatos incompatíveis
try:
invalid_reshape = np.reshape(arr, (2,7))
print(invalid_reshape)
except ValueError as e:
print(f"nErro: {e}")
2. ndarray.reshape()
O método ndarray.reshape()
fornece uma abordagem alternativa, operando diretamente em um objeto ndarray
existente. Sua funcionalidade é idêntica à numpy.reshape()
; a única diferença reside no método de invocação.
arr = np.arange(12)
reshaped_arr = arr.reshape((4, 3)) # Chamada de método
print("nArray reformado (chamada de método):n", reshaped_arr)
3. Considerações sobre Memória Compartilhada
Tanto numpy.reshape()
quanto ndarray.reshape()
geralmente operam no local. Isso significa que eles não criam uma cópia dos dados do array; em vez disso, eles modificam a visualização dos dados subjacentes. Isso é altamente eficiente em termos de memória. Alterações no array reformado são refletidas no original e vice-versa. No entanto, isso também exige consideração cuidadosa, especialmente se você precisar preservar o conteúdo do array original. Para criar uma cópia, use o método .copy()
:
arr = np.arange(12)
reshaped_arr = arr.reshape((3,4))
reshaped_arr[0,0] = 99 # Modifica o array original também!
print("nArray original após modificação do reshape:n", arr)
arr = np.arange(12)
reshaped_arr_copy = arr.reshape((3,4)).copy() # Cria uma cópia
reshaped_arr_copy[0,0] = 100 # Modifica apenas a cópia
print("nArray original após modificação da cópia:n", arr)
4. numpy.resize()
A função numpy.resize()
oferece a capacidade de alterar o tamanho de um array, ao contrário de reshape()
, que preserva o número total de elementos. resize()
pode alterar o número de elementos. Se o novo tamanho for maior, o array é preenchido com zeros ou elementos repetidos. Se menor, os elementos são truncados. Importante: resize()
*sempre* retorna um novo array; ele não modifica o original no local.
arr = np.arange(5)
resized_arr = np.resize(arr, (8,)) # Redimensiona para comprimento 8
print("nArray redimensionado (preenchido com zeros):n", resized_arr)
resized_arr_2 = np.resize(arr,(2,)) #Redimensiona para comprimento 2
print("nArray redimensionado (truncado):n", resized_arr_2)
resized_arr_3 = np.resize(arr, (2,3)) #Redimensiona para 2x3, irá repetir o array
print("nArray redimensionado (repetido):n", resized_arr_3)
Este tutorial fornece uma visão geral abrangente de reformar e redimensionar arrays NumPy. Dominar essas técnicas é vital para a manipulação eficiente de dados em computação científica e ciência de dados.