Python

NumPy: Concatenar matrices con vectores en NumPy

Para unir el contenido de varias matrices de NumPy se puede recurrir a la función concatenate(), con la que fácilmente se puede concatenar matrices con matrices. Pero en el caso de que sea necesario concatenar matrices con vectores es necesario usar un truco para ello.

Como no concatenar matrices con vectores en NumPy

Posiblemente, después de aprender como se tiene que utilizar la función concatenate() para unir dos matrices, lo primero que se puede intentar para combinar una matriz con un vector sea algo como lo siguiente

import numpy as np

vec = np.array([10, 10, 10])
mat = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

np.concatenate((mat, vec))
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s)

Esperando conseguir una nueva matriz de 4 por 3 con el vector en la última fila, pero lo que se obtiene es un error. Esto es así porque las dimensiones de los dos objetos no coinciden, uno es una matriz de 3 por 3 y el otro es un vector.

El método para concatenar matrices con vectores en NumPy

Para solucionar el problema solamente deberemos convertir el vector en una matriz.

import numpy as np

vec = np.array([10, 20, 30])
mat = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

np.concatenate((mat, [vec]))
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 20, 30]])

Con lo que se obtiene ya el resultado esperado, la matriz de 3 por cuatro con el vector como última fila. Ahora, en el caso de que se desee concatenar el vector como una columna es necesario realizar algunas tareas adicionales. Además de indicar a la función que se concatene por columnas, para lo que se debe usar el parámetro axis, hay que convertir el vector en una matriz columna mediante el uso del operador transponer (T). Esto es, se puede usar el siguiente código

np.concatenate((mat, np.array([vec]).T), axis=1)
array([[ 1,  2,  3, 10],
       [ 4,  5,  6, 20],
       [ 7,  8,  9, 30]])

Con lo que se obtiene una matriz final de 3 por 4 donde el vector se ha insertado como una columna al final.

Conclusiones

En esta ocasión se ha visto un pequeño truco gracias al cual se puede agregar rápidamente el contenido de un vector a una matriz. Tanto como una nueva fila como columna. Algo que nos puede sacar de un apuro en más de una ocasión.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: NumPy

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.