NumPy Tutorials

Dominando la Reformulación y Redimensionamiento de Arrays NumPy

Spread the love

Manipular eficientemente las formas de las matrices es fundamental para el procesamiento efectivo de datos con NumPy. Este tutorial profundiza en dos funciones principales para remodelar y cambiar el tamaño de las matrices NumPy: reshape() y resize(). Exploraremos sus funcionalidades, diferencias sutiles y mejores prácticas para asegurar que pueda utilizarlas con confianza en sus proyectos de ciencia de datos.

Tabla de Contenido

  1. numpy.reshape()
  2. ndarray.reshape()
  3. Consideraciones de Memoria Compartida
  4. numpy.resize()

1. numpy.reshape()

La función numpy.reshape() es una herramienta versátil para modificar la forma de una matriz NumPy sin alterar sus datos subyacentes. Requiere la matriz y la nueva forma deseada como entradas. Crucialmente, la nueva forma debe ser compatible con el tamaño de la matriz original (el número total de elementos debe permanecer sin cambios).


import numpy as np

arr = np.arange(12)  # Crea una matriz [0, 1, 2, ..., 11]
print("Matriz original:n", arr)

reshaped_arr = np.reshape(arr, (3, 4))  # Remodelar a una matriz 3x4
print("nMatriz remodelada:n", reshaped_arr)

#Usando -1 para cálculo automático de dimensión
auto_reshape = np.reshape(arr, (-1, 3)) 
print("nMatriz auto-remodelada:n", auto_reshape)

#Manejo de errores para formas incompatibles
try:
    invalid_reshape = np.reshape(arr, (2,7))
    print(invalid_reshape)
except ValueError as e:
    print(f"nError: {e}")

2. ndarray.reshape()

El método ndarray.reshape() proporciona un enfoque alternativo, operando directamente en un objeto ndarray existente. Su funcionalidad es idéntica a numpy.reshape(); la única diferencia radica en el método de invocación.


arr = np.arange(12)
reshaped_arr = arr.reshape((4, 3))  # Llamada al método
print("nMatriz remodelada (llamada al método):n", reshaped_arr)

3. Consideraciones de Memoria Compartida

Tanto numpy.reshape() como ndarray.reshape() generalmente operan en el lugar. Esto significa que no crean una copia de los datos de la matriz; en cambio, modifican la vista de los datos subyacentes. Esto es altamente eficiente en cuanto a memoria. Los cambios en la matriz remodelada se reflejan en la original, y viceversa. Sin embargo, esto también requiere una consideración cuidadosa, especialmente si necesita preservar el contenido de la matriz original. Para crear una copia, use el método .copy():


arr = np.arange(12)
reshaped_arr = arr.reshape((3,4))
reshaped_arr[0,0] = 99 # ¡Modifica también la matriz original!
print("nMatriz original después de la modificación de remodelación:n", arr)

arr = np.arange(12)
reshaped_arr_copy = arr.reshape((3,4)).copy() #Crea una copia
reshaped_arr_copy[0,0] = 100 # Solo modifica la copia
print("nMatriz original después de la modificación de la copia:n", arr)

4. numpy.resize()

La función numpy.resize() ofrece la capacidad de cambiar el tamaño de una matriz, a diferencia de reshape(), que preserva el número total de elementos. resize() puede alterar el número de elementos. Si el nuevo tamaño es mayor, la matriz se rellena con ceros o elementos repetidos. Si es menor, los elementos se truncan. Importantemente, resize() *siempre* devuelve una nueva matriz; no modifica la original en el lugar.


arr = np.arange(5)
resized_arr = np.resize(arr, (8,))  # Cambiar el tamaño a longitud 8
print("nMatriz redimensionada (rellenada con ceros):n", resized_arr)

resized_arr_2 = np.resize(arr,(2,)) #Cambiar el tamaño a longitud 2
print("nMatriz redimensionada (truncada):n", resized_arr_2)

resized_arr_3 = np.resize(arr, (2,3)) #Cambiar el tamaño a 2x3, repetirá la matriz
print("nMatriz redimensionada (repetida):n", resized_arr_3)

Este tutorial proporciona una descripción general completa de la remodelación y el cambio de tamaño de las matrices NumPy. Dominar estas técnicas es vital para la manipulación eficiente de datos en computación científica y ciencia de datos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *