Manipulación de Matrices y Arrays en NumPy: Transponer, Invertir y Aplanar
Resumen
Aprender a transponer y transformar matrices, invertir arrays y aplanar arrays multidimensionales son habilidades esenciales para manejar grandes volúmenes de datos y realizar cálculos complejos de manera eficiente. Usando la librería NumPy en Python, estas operaciones no solo son fáciles de implementar sino también altamente optimizadas para trabajar con grandes conjuntos de datos.
Transposición de Matrices
La transposición de una matriz es una operación que intercambia sus filas y columnas, esencial en el álgebra lineal y la manipulación de datos científicos. En NumPy, se puede transponer una matriz usando matrix.T, lo que convierte las filas en columnas y viceversa.
La función reshape permite cambiar la forma de un array sin cambiar sus datos. Es importante asegurarse de que el número total de elementos permanezca constante.
Por ejemplo, un array de 12 elementos puede ser remodelado en una matriz de 3x4, 4x3, 2x6, etc., pero no en una matriz de 5x3.
# Crea un array con los números del 1 al 12array = np.arange(1,13)# Cambia la forma del array a una matriz de 3 filas y 4 columnasreshaped_array = array.reshape(3,4)print("Array original:", array)print("Array reshaped a 3x4:\n", reshaped_array)
np.arange(1, 13) crea un array unidimensional de 12 elementos.
array.reshape(3, 4) reorganiza este array en una matriz de 3 filas y 4 columnas. El número total de elementos (12) debe ser el mismo antes y después del reshaping.
Asegúrate de que el número total de elementos en la nueva forma coincide con el número total de elementos en el array original. De lo contrario, se producirá un ValueError.
¿Cómo se invierte un array en NumPy?
En el procesamiento de señales y en algoritmos de inversión de datos, es muy común invertir un array, lo que implica cambiar el orden de sus elementos de forma que el primer elemento se convierta en el último y viceversa.
# Crea un array con los números del 1 al 5array = np.array([1,2,3,4,5])# Invierte el array
reversed_array = array[::-1]print("Array original:", array)print("Array invertido:", reversed_array)
array[::-1] Invierte el array utilizando slicing. array[start:stop:step] es la notación general para slicing en Python, donde start es el índice inicial, stop es el índice final (excluido), y step es el tamaño del paso. Al omitir start y stop y usar 1 como step, se obtiene una copia del array en orden inverso.
Siempre debes asegurarte de que los índices start, stop, y step estén configurados correctamente para evitar errores de indexación.
Flattening de Arrays Multidimensionales
El aplanamiento de arrays es el proceso de convertir un array multidimensional en un array unidimensional, es útil en algoritmos que requieren una entrada lineal o para operaciones de agregación. En NumPy, se puede aplanar un array usando flatten().
# Crea un array 2D
multi_array = np.array([[1,2,3],[4,5,6],[7,8,9]])# Aplana el array 2D a 1D
flattened_array = multi_array.flatten()print("Array multidimensional:\n", multi_array)print("Array aplanado:", flattened_array)
multi_array.flatten() convierte un array 2D en un array 1D, esencialmente "aplanando" la estructura multidimensional. Esto es útil para algoritmos que requieren una entrada unidimensional o para facilitar operaciones de agregación.
La operación flatten() siempre crea una copia, así que debes asegurarte de que esto es lo que deseas para evitar problemas de memoria.
Estos procesos, reshape y manipulación de arrays, permiten que los datos se preparen correctamente para que la red neuronal pueda extraer patrones y hacer predicciones con precisión. Sin reshape y manipulación de arrays, no sería posible aplicar redes neuronales a una amplia variedad de problemas de datos estructurados o no estructurados.
Me encanto la conceptualización final que da Carli sobre el uso para redes neuronales.
1. TRANSPOSICIÓN DE MATRICES
Descripción: La transposición de matrices en Numpy reorganiza las filas y columnas de un arreglo 2D. El atributo .T invierte la matriz a lo largo de su diagonal, intercambiando filas por columnas.
Explicación: Las filas de la matriz original se convierten en las columnas de la matriz transpuesta, y viceversa.
2. RESHAPE
Descripción: La función reshape en Numpy permite cambiar la forma de un arreglo sin alterar sus datos. El número total de elementos debe permanecer constante.
Ejemplos:
**RESHAPE VÁLIDO:**array = np.arange(1, 13)
reshaped_array = array.reshape(3, 4)
print(array)
print(reshaped_array)
Resultado: array: [1 2 3 4 5 6 7 8 9 10 11 12]
reshaped_array:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
Explicación: El arreglo 1D con 12 elementos se reconfigura en un arreglo 2D de 3x4.
**RESHAPE INVÁLIDO:**array = np.arange(1, 15)
reshaped_array = array.reshape(3, 4)
Resultado: ValueError: cannot reshape array of size 14 into shape (3, 4)
Explicación: La operación falla porque el número total de elementos (14) no es divisible por la forma deseada (3x4).
3. REVERSE
Descripción: Invertir un arreglo cambia su orden. En Numpy, se puede invertir un arreglo utilizando slicing con un paso de -1.
Ejemplos:
Código: array = np.arange(1, 13)
reversed_array = array[::-1]
print(array)
print(reversed_array)
Resultado: array: [ 1 2 3 4 5 6 7 8 9 10 11 12]
reversed_array: [12 11 10 9 8 7 6 5 4 3 2 1]
Explicación: La operación de slicing con [::-1] invierte el arreglo.
4. FLATTENING
Descripción: Flattening convierte un arreglo multidimensional en un arreglo unidimensional. El método .flatten() en Numpy lo logra.
Explicación: La matriz 2D se reduce a un arreglo 1D combinando todos los elementos por filas.
Transpuesta
La transpuesta de una matriz en NumPy se puede obtener utilizando el método .T. Este método intercambia las filas y columnas de la matriz original. Por ejemplo, si tienes una matriz A, su transpuesta se obtiene con A.T.
import numpy as np
A= np.array([[1,2,3],[4,5,6]])A_transpuesta=A.Tprint("Matriz original:\\\\n",A)print("Matriz transpuesta:\\\\n",A_transpuesta)
Reshape
El método reshape de NumPy permite cambiar la forma de un array sin alterar sus datos. Por ejemplo, si tienes un array B de forma (2, 3), puedes cambiarlo a una forma (3, 2) utilizando B.reshape(3, 2).
El método flatten de NumPy convierte un array multidimensional en un array unidimensional. Esto es útil cuando necesitas trabajar con datos en una forma lineal. Por ejemplo, si tienes un array D de forma (2, 3), puedes aplanarlo utilizando D.flatten().
La función ravel también aplanará un array como flatten, pero devuelve una vista del array original cuando sea posible.
raveled_array = reshaped_array.ravel()print("Array aplanado con ravel:")print(raveled_array)```# Aplanar el array con ravel
raveled\_array = reshaped\_array.ravel()print("Array aplanado con ravel:")print(raveled\_array)
¿Cuál es la mejor forma de invertir arrays?
La forma más eficiente y elegante de invertir el orden de los elementos es utilizando la técnica de slicing con la sintaxis array[::-1]. Esta notación le indica a Python que recorra la estructura desde el principio hasta el final, pero dando pasos negativos de uno en uno.
Imagina que estás leyendo un libro desde la última página hasta la primera. Al usar [::-1], no estás creando un bucle pesado ni consumiendo memoria extra procesando cada elemento individualmente; simplemente estás leyendo el mismo bloque de memoria en la dirección opuesta. Esta técnica es extremadamente rápida y se procesa a nivel de C (el lenguaje en el que está escrito NumPy subyacentemente). Es ideal para algoritmos de procesamiento de señales de audio, donde necesitas reproducir un sonido en reversa, o en análisis de series temporales para ver los datos más recientes primero.
# Invertir el orden de un array (x[::-1]) array[start:stop:step] x[inicio:fin:paso/salto] (x[::] Incluir todos)
array = np.array([1, 2, 3, 4, 5])
reversed_array_1 = array[::-1] # desde el final / derecha desde de la utima posición cada -1(paso) (invertir)
reversed_array_2 = array[4:1:-1] # desde el final / derecha desde de la utima posición cada -1(paso) entre el la 4ta y 1ra posición, como el paso es negativo el orden de inicio y fin tambien es invertido 4:1 (invertir)
reversed_array_3 = array[::-2] # desde el final / derecha desde de la utima posición cada -2(paso) (invertir)
reversed_array_4 = array[::-3] # desde el final / derecha desde de la utima posición cada -3(paso) (invertir)
reversed_array_5 = array[::-4] # desde el final / derecha desde de la utima posición cada -4(paso) (invertir)
reversed_array_6 = array[::-5] # desde el final / derecha desde de la utima posición cada -5(paso) (invertir) Ultim elemento porque el paso es mayor que el tamaño del array
reversed_array_7 = array[::-6] # desde el final / derecha desde de la utima posición cada -6(paso) (invertir) Ultim elemento porque el paso es mayor que el tamaño del array
reversed_array_8 = array[::-7] # desde el final / derecha desde de la utima posición cada -7(paso) (invertir) Ultim elemento porque el paso es mayor que el tamaño del array
reversed_array_9 = array[::1] # desde el inicio / izquierda (no invierte)
print(array)
print(reversed_array_1)
print(reversed_array_2)
print(reversed_array_3)
print(reversed_array_4)
print(reversed_array_5)
print(reversed_array_6)
print(reversed_array_7)
print(reversed_array_8)
print(reversed_array_9)
###
[1 2 3 4 5]
[5 4 3 2 1]
[5 4 3]
[5 3 1]
[5 2]
[5 1]
[5]
[5]
[5]
[1 2 3 4 5]
Para remodelar una matriz 2D de 12 elementos utilizando reshape, las nuevas dimensiones deben ser números cuyo producto sea exactamente 12. Esto significa que las dimensiones deben ser divisores de 12.
Los divisores de 12 son: 1, 2, 3, 4, 6, 12. Por lo tanto, puedes remodelar la matriz 2D de 12 elementos en cualquiera de las siguientes formas:
(1, 12) - 1 fila y 12 columnas
(2, 6) - 2 filas y 6 columnas
(3, 4) - 3 filas y 4 columnas
(4, 3) - 4 filas y 3 columnas
(6, 2) - 6 filas y 2 columnas
(12, 1) - 12 filas y 1 columna
By: ChatGPT
buen aporte
¿En vertical también se puede imprimir la matrix o solo en horizontal?
Si quieres imprimirla en vertical solo basta con usar la función reshape():