Revista Informática

NumPy: Insertar valores en matrices de NumPy

Publicado el 24 agosto 2021 por Daniel Rodríguez @analyticslane
NumPy: Insertar valores en matrices de NumPy

La inserción de valores en listas de Python no es una tarea sencilla, pero en NumPy se cuenta con la función np.insert(). Una función con la que es posible insertar valores en matrices de NumPy de una forma bastante sencilla.

La función np.insert()

Dentro de la librería NumPy se puede encontrar la función np.insert() con la que es posible insertar valores dentro de un vector o matriz. Una función que tiene la siguiente forma:

np.insert(arr, index, values, axis=None)

donde

  • arr: objeto que contiene un vector o matriz compatible con NumPy.
  • index: la posición del índice o índices antes de los cuales se desea insertar el valor o valores.
  • values: valores que se desean insertar en el vector o matriz.
  • axis: eje a lo largo del cual se desean insertar los valores. Las posibles opciones de este parámetro son:
    • None: con esta opción la matriz de entrada se aplana y los valores se introducen en la posición indicada, siendo este el valor por defecto de la función.
    • 0: los valores se introducen después de la fila indicada.
    • 1: los valores se introducen después de la columna indicada.

Insertar valores en un vector de NumPy

La operación más sencilla que se puede realizar con la función np.insert() es la inserción de valor en un vector. Para lo que es necesario pasar tres parámetros a la función. En primer lugar, el vector en el que se desea insertar el valor, seguido de la posición después de la que se realizará la inserción y el valor a insertar. Por ejemplo, para insertar un valor después de la tercera posición del vector se tiene que hacer.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

np.insert(arr, 3, 6)
array([1, 2, 3, 6, 4, 5])

El siguiente paso sería insertar más de un valor, para lo que únicamente se tiene que indicar el vector como tercer parámetro de la función. Así para agregar dos valores simplemente se tiene que escribir.

np.insert(arr, 3, [6, 7])
array([1, 2, 3, 6, 7, 4, 5])

Insertar más de un valor en un vector de NumPy

Para conseguir insertar más de un valor se puede usar un vector con los índices como segundo parámetro de np.insert(). De este modo se insertará el valor después de cada uno de los índices.

np.insert(arr, (2, 4), 10)
array([ 1,  2, 10,  3,  4, 10,  5])

Nótese que se ha insertado los valores después de los índices originales, no es necesario tener en cuenta el desplazamiento que se produce después de insertar el primero. En el caso de que se desee insertar valores diferentes solamente se tendrá que pasar un vector como tercer parámetro, vector que debe tener el mismo tamaño que el vector de índices.

np.insert(arr, (2, 4), (10, 20))
array([ 1,  2, 10,  3,  4, 20,  5])

Insertar valores en matrices de NumPy

Una vez visto cómo funciona la inserción de valores en un vector se puede analizar el trabajo con matrices. En este caso lo único que cambia es la necesidad de indicar si el valor se insertará después de las filas o columnas. Opción que se indica mediante la propiedad axis. Es importante que este dato se indique, ya que por defecto la función aplanara la matriz e insertará los valores en la posición del vector resultante. Así, para insertar un vector de ceros después de la primera fila es necesario escribir.

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

np.insert(mat, 1, (0, 0, 0), axis=0)
array([[1, 2, 3],
       [0, 0, 0],
       [4, 5, 6],
       [7, 8, 9]])

Mientras que sin se desea insertar este vector después de la primera columna solamente se tienen que cambiar el valor de la propiedad axis.

np.insert(mat, 1, (0, 0, 0), axis=1)
array([[1, 0, 2, 3],
       [4, 0, 5, 6],
       [7, 0, 8, 9]])

Conclusiones

En esta entrada se ha visto cómo se pueden insertar valores en matrices de NumPy mediante el uso de la función np.insert(). Una función que puede ser de gran ayuda evitando una tarea que podría ser tediosa en caso de que no existiese.


Volver a la Portada de Logo Paperblog