NumPy: Crear matrices vacías en NumPy y adjuntar filas o columnas

Publicado el 11 enero 2021 por Daniel Rodríguez @analyticslane

El método empty() permite crear matrices en NumPy sin la necesidad de inicializar los valores de estos. Esto es, crea matrices con los valores que en ese momento se encuentren en memoria. Aunque también se pueden crear matrices varias sin elementos en una dimensión. Junto a este método se puede utilizar el método append() para ir agregando poco a poco los valores de las matrices. Con lo que se puede crear matrices vacías en NumPy y adjuntar filas o columnas.

El método empty() de NumPy

Al llamar al método empty() de NumPy indicando las dimensiones de una matriz y, opcionalmente, el tipo de dato se creará un elemento sin la necesidad de asignar valores a esta. Esto creará el objeto, pero los valores eran los que en ese momento estén en memoria, lo que puede aparentar aleatoriedad. Por ejemplo, se puede crear una matriz de dos por tres con números enteros

import numpy as np

array = np.empty((2, 3), int)
array([[-8070450532247928832,  4611694788215336344,  7957688336701784067],
       [ 3417785037640393060,    13337528831520302,      984741549538594]])

Al ejecutar en otro momento los valores observados cambian aleatoriamente. Por otro lado, si ya se dispone de una matriz y se quiere crear otra similar sin inicializar los valores se puede usar el método empty_like().

array = np.empty_like([[1,1],[1,1]])
array([[-8070450532247928832, -8070450532247928832],
       [-4611677248642875390,      562949953421312]])

Al igual que en el caso anterior los valores cambiarán de una ejecución a otra. Ahora se pueden usar empty() para crear elementos realmente vacíos, indicando que una de las dimensiones es cero.

array = np.empty((0, 3), int)
array([], shape=(0, 3), dtype=int64)

Agregar fila con append() en NumPy

Una vez se dispone un array vacío o no, se pueden agregar filas y columnas con el método append(). Método al que solamente se le debe indicar el objeto original, el array a agregar y el eje en el que se desea agregar. Cero en el caso de las filas y uno en el de las columnas. Así, para agregar dos columnas al array anterior solamente se debería hacer.

array = np.append(array, np.array([[11, 12, 13]]), axis=0)
array = np.append(array, np.array([[21, 22, 23]]), axis=0)
array([[11, 12, 13],
       [21, 22, 23]])

Cuando se necesita agregar más de una fila este proceso puede ser un poco tedioso. Agregar fila a fila, especialmente si ya se dispone de los datos en una matriz. Pero append() puede adjuntar directamente una matriz a otra, mientras las dimensiones sean correctas. Algo que se puede ver en el siguiente ejemplo.

array = np.append(array, np.array([[31, 32, 33], [41, 42, 43]]), axis=0)
array([[11, 12, 13],
       [21, 22, 23],
       [31, 32, 33],
       [41, 42, 43]])

Agregar columnas con append() en NumPy

Para agregar columnas en primer lugar hay que agregar un matriz vacía sin columnas con empty(). Para, posteriormente, agregar un vector columna con append().

array = np.empty((3, 0), int)
array = np.append(array, np.array([[11], [21], [31]]), axis=1)
array([[11],
       [21],
       [31]])

Nótese que en este caso el vector se ha creado siendo un vector columna, algo que se puede evitar con el método transpose() que posen los arrays de NumPy. Se puede crear un vector fila, más fácil de escribir, y trasponer.

array = np.append(array, np.array([[12, 22, 32]]).transpose(), axis=1)
array([[11, 12],
       [21, 22],
       [31, 32]])

Al igual que en el caso de las filas también se puede agregar más de una columna mediante de una matriz.

array = np.append(array, np.array([[13, 23, 33], [14, 24, 34]]).transpose(), axis=1)
array([[11, 12, 13, 14],
       [21, 22, 23, 24],
       [31, 32, 33, 34]])

Conclusiones

En esta ocasión se ha visto cómo crear matrices vacías en NumPy sin la necesidad de inicializar estas. Proceso que nos permite evitar ciertos pasos y recurrir a funciones como ones() o zeros() para crear los objetos con los que vamos a trabajar.