Introducción
La función reshape() en la biblioteca NumPy te permite cambiar la forma de una matriz (array) sin alterar sus datos. Esta función poderosa te ayuda a reorganizar los elementos de la matriz en diferentes dimensiones según tus necesidades específicas. Ya sea que necesites convertir una matriz unidimensional en una matriz (matrix) o crear una matriz multidimensional para el procesamiento de datos, la función reshape() ofrece una solución flexible.
En este laboratorio (lab), exploraremos las aplicaciones prácticas de la función reshape(), entenderemos su sintaxis y aprenderemos cómo usarla de manera efectiva con diferentes parámetros.
Empezando con NumPy y Creando Matrices
Antes de poder cambiar la forma de las matrices (arrays), necesitamos entender qué son las matrices de NumPy y cómo crearlas. NumPy (Numerical Python) es una poderosa biblioteca que ofrece soporte para matrices (arrays) y matrices (matrices) multidimensionales de gran tamaño, junto con una colección de funciones matemáticas para operar en estas matrices.
Comencemos creando un nuevo archivo de Python en el WebIDE. Haz clic en el icono de "Explorer" en la barra lateral izquierda y luego haz clic en el botón "New File". Nombra tu archivo numpy_reshape.py.

Ahora, importemos la biblioteca NumPy y creemos una matriz básica:
import numpy as np
## Create a simple 1D array using np.arange() which generates a sequence of numbers
original_array = np.arange(12)
print("Original 1D array:")
print(original_array)
print("Shape of the original array:", original_array.shape)
print("Dimensions of the original array:", original_array.ndim)
Abre la terminal en el WebIDE y ejecuta tu script:
python3 numpy_reshape.py
Deberías ver una salida similar a esta:
Original 1D array:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
Shape of the original array: (12,)
Dimensions of the original array: 1
Entendamos qué está sucediendo aquí:
np.arange(12)crea una matriz unidimensional con valores del 0 al 11.array.shapenos dice las dimensiones de la matriz (12 elementos en una sola dimensión).array.ndimnos dice el número de dimensiones (1 en este caso).
Redimensionamiento Básico - Conversión de Matrices 1D a 2D
Ahora que entendemos los conceptos básicos de las matrices (arrays) de NumPy, exploremos la función reshape(). Esta función nos permite cambiar la forma de una matriz sin alterar sus datos.
Abre tu archivo numpy_reshape.py y agrega el siguiente código:
import numpy as np
## Create a simple 1D array
original_array = np.arange(12)
print("Original 1D array:")
print(original_array)
print("Shape of the original array:", original_array.shape)
print("Dimensions of the original array:", original_array.ndim)
print("-" * 50) ## Separator line
## Reshape the array to a 2D array with 3 rows and 4 columns
reshaped_3x4 = np.reshape(original_array, (3, 4))
print("Reshaped array (3x4):")
print(reshaped_3x4)
print("Shape of the reshaped array:", reshaped_3x4.shape)
print("Dimensions of the reshaped array:", reshaped_3x4.ndim)
print("-" * 50) ## Separator line
## Reshape the array to a 2D array with 4 rows and 3 columns
reshaped_4x3 = np.reshape(original_array, (4, 3))
print("Reshaped array (4x3):")
print(reshaped_4x3)
print("Shape of the reshaped array:", reshaped_4x3.shape)
print("Dimensions of the reshaped array:", reshaped_4x3.ndim)
Ejecuta tu script en la terminal:
python3 numpy_reshape.py
Deberías ver una salida que muestra cómo se ha redimensionado la matriz original en diferentes estructuras 2D.
Entendamos qué está sucediendo:
- Primero creamos una matriz 1D con 12 elementos.
- La redimensionamos en una matriz (matrix) de 3×4 (3 filas, 4 columnas).
- Luego la redimensionamos en una matriz de 4×3 (4 filas, 3 columnas).
En ambos casos, el número total de elementos sigue siendo el mismo (12), pero la organización cambia. La función reshape() requiere que la nueva forma sea compatible con el tamaño de la matriz original. Esto significa que el producto de las dimensiones en la nueva forma debe ser igual al número total de elementos en la matriz original.
Redimensionamiento Avanzado - Creación de Matrices 3D
Ahora, pasemos al redimensionamiento más avanzado creando matrices tridimensionales (3D). Las matrices 3D son esencialmente matrices de matrices 2D y son útiles para representar volúmenes, series temporales de imágenes u otras estructuras de datos complejas.
Agrega el siguiente código a tu archivo numpy_reshape.py:
import numpy as np
## Create a simple 1D array
original_array = np.arange(24)
print("Original 1D array:")
print(original_array)
print("Shape of the original array:", original_array.shape)
print("-" * 50) ## Separator line
## Reshape into a 3D array with dimensions 2x3x4
## This creates 2 blocks, each with 3 rows and 4 columns
reshaped_3d = np.reshape(original_array, (2, 3, 4))
print("Reshaped 3D array (2x3x4):")
print(reshaped_3d)
print("Shape of the 3D array:", reshaped_3d.shape)
print("Dimensions of the 3D array:", reshaped_3d.ndim)
print("-" * 50) ## Separator line
## Accessing elements in a 3D array
print("First block of the 3D array:")
print(reshaped_3d[0])
print("\nSecond block of the 3D array:")
print(reshaped_3d[1])
print("\nElement at position [1,2,3] (second block, third row, fourth column):")
print(reshaped_3d[1, 2, 3])
Ejecuta tu script nuevamente:
python3 numpy_reshape.py
La salida mostrará cómo una matriz 1D con 24 elementos se puede transformar en una estructura 3D. Esta estructura se puede visualizar como 2 bloques, cada uno de los cuales contiene una matriz de 3×4.
Comprendiendo las matrices 3D:
- La primera dimensión (2) representa el número de "bloques" o "capas".
- La segunda dimensión (3) representa el número de filas en cada bloque.
- La tercera dimensión (4) representa el número de columnas en cada fila.
Esta estructura es especialmente útil para el procesamiento de imágenes (donde cada "bloque" podría ser un canal de color), datos de series temporales (donde cada "bloque" podría ser un punto en el tiempo) u otros escenarios que requieran múltiples matrices.
Comprendiendo los Parámetros de Orden en el Redimensionamiento
Al redimensionar matrices (arrays), NumPy proporciona un parámetro adicional llamado order que controla cómo se leen los elementos de la matriz original y se colocan en la matriz redimensionada. Hay dos convenciones de ordenamiento principales:
- Ordenamiento estilo C (por filas, row-major): El predeterminado en NumPy, donde el índice del último eje cambia más rápido.
- Ordenamiento estilo Fortran (por columnas, column-major): Donde el índice del primer eje cambia más rápido.
Exploremos ambos métodos de ordenamiento agregando este código a tu archivo numpy_reshape.py:
import numpy as np
## Create a 1D array
original_array = np.arange(12)
print("Original 1D array:")
print(original_array)
print("-" * 50) ## Separator line
## Reshape using C-style ordering (default)
c_style = np.reshape(original_array, (3, 4), order='C')
print("Reshaped array with C-style ordering (row-major):")
print(c_style)
print("-" * 50) ## Separator line
## Reshape using Fortran-style ordering
f_style = np.reshape(original_array, (3, 4), order='F')
print("Reshaped array with Fortran-style ordering (column-major):")
print(f_style)
print("-" * 50) ## Separator line
## Alternative syntax using the array's reshape method
array_method = original_array.reshape(3, 4)
print("Using the array's reshape method:")
print(array_method)
print("-" * 50) ## Separator line
## Using -1 as a dimension (automatic calculation)
auto_dim = original_array.reshape(3, -1) ## NumPy will figure out that -1 should be 4
print("Using automatic dimension calculation with -1:")
print(auto_dim)
print("Shape:", auto_dim.shape)
Ejecuta tu script para ver las diferencias:
python3 numpy_reshape.py
Puntos clave para entender:
- Ordenamiento estilo C (por filas, row-major): Los elementos se colocan fila por fila. Este es el predeterminado en NumPy.
- Ordenamiento estilo Fortran (por columnas, column-major): Los elementos se colocan columna por columna.
- Sintaxis del método de la matriz: En lugar de usar
np.reshape(array, shape), puedes usararray.reshape(shape). - Cálculo automático de dimensiones: Usar
-1para una de las dimensiones le dice a NumPy que calcule automáticamente esa dimensión en función del tamaño de la matriz.
El parámetro de orden es particularmente importante cuando:
- Estás trabajando con matrices muy grandes y la disposición en memoria es importante para el rendimiento.
- Estás interactuando con otras bibliotecas o lenguajes que usan un orden predeterminado diferente.
- Necesitas garantizar la compatibilidad con algoritmos específicos.
Resumen
En este laboratorio, exploramos la versátil función reshape() de NumPy, que nos permite reorganizar los datos de una matriz (array) en diferentes dimensiones sin cambiar los datos subyacentes. Esto es lo que aprendimos:
Redimensionamiento básico: Cómo transformar matrices unidimensionales en matrices bidimensionales con diferentes configuraciones de filas y columnas.
Redimensionamiento avanzado: Creación de matrices tridimensionales para estructuras de datos más complejas, que son útiles para representar volúmenes, series temporales de imágenes u otros datos multidimensionales.
Parámetros de orden: Comprender la diferencia entre el ordenamiento estilo C (por filas, row-major) y el estilo Fortran (por columnas, column-major), y cómo afectan la disposición de los elementos en la matriz redimensionada.
Sintaxis alternativa: Usar tanto la función
np.reshape()como el método.reshape()de la matriz para obtener los mismos resultados.Cálculo automático de dimensiones: Usar
-1como un marcador de posición para que NumPy calcule automáticamente la dimensión adecuada.
La función reshape() es una herramienta fundamental en la manipulación de datos con NumPy, que permite una reorganización eficiente de los datos para diversas aplicaciones en ciencia de datos, aprendizaje automático y computación científica. Comprender cómo redimensionar los datos correctamente es esencial para preparar las entradas de los modelos, visualizar datos multidimensionales y realizar operaciones matemáticas complejas en matrices.