NumPy: ¿Cómo acceder al i-ésimo elemento de una matriz multidimensional de NumPy?

Publicado el 27 julio 2021 por Daniel Rodríguez @analyticslane

Una pregunta que me suele hacer de forma habitual los usuarios que comienzan con NumPy es cómo se puede acceder a un elemento en concreto. Pudiendo hacer referencia tanto a un escalar, una columna como una fila. Algo que es relativamente sencillo en cuanto se entiende el funcionamiento de las matrices multidimensionales de NumPy. Así que comprendamos estos objetos para saber cómo acceder al i-ésimo elemento de una matriz multidimensional de NumPy.

Acceder a los escalares de una matriz multidimensional de NumPy

Para acceder a los elementos de una matriz en NunPy es necesario indicar las coordenadas de estos entre corchetes después del nombre del objeto. En el caso de trabajar con un vector solamente hace falta un número, pero al trabajar con objetos multidimensionales es necesario indicar tantos números como dimensiones tenga el objeto separados por comas. Así en el caso de trabajar con matrices 2D es necesario indicar dos números.

Esto es, al trabajar con una matriz bidimensional se puede acceder al valor de la segunda fila y tercera columnas mediante la expresión mat[1,2], recordando que en Python la primera posición de un elemento tiene el índice 0. Para que esto funcione es necesario que la matriz tenga por lo menos dos filas y tres columnas, ya que en caso contrario el comando dará un error indicando que no se puede acceder a algún índice

Acceder a filas o columnas de una matriz multidimensional de NumPy

En una matriz bidimensional cuando se omite el segundo valor dentro de los corchetes se obtiene como resultado la fila indicada. Así si se indica que se desea obtener el elemento mat[1] se obtendrá la segunda fila de la matriz.

Otra forma de conseguir esto es usar el comodín dos puntos (:) mediante el que se indica todos los elementos. Así también se puede obtener la segunda fila de la matriz escribiendo mat[1, :]. Una forma que es más clara que la anterior, ya que al leer el código se puede ver que se espera un objeto bidimensional sin necesidad de conocer el contenido del elemento.

Análogamente a esto se puede obtener la segunda columnas escribiendo mat[:, 1]. Esto es, todos los elementos de todas las filas en la columna 1.

Acceder a un escalar por posición

En el caso de matrices, una forma alternativa para obtener un escalar es aplanar la matriz e indicar el índice de este. Teniendo en cuenta que al aplanar la matriz en primer lugar se situará la primera fila, luego la segunda y así hasta que termine el final. De este modo se puede obtener el quinto elemento de la matriz ordenado por filas mediante mat.flat[5] u ordenado por columnas, para lo que primero es necesario transponer la matriz, mediante el comando mat.T.flat[5].

Seleccionar múltiples elementos

Finalmente, también se puede usar los dos puntos para indicar múltiples elementos, lo que puede ser múltiples filas, columnas o ambas. En este caso se puede indicar un número antes de los dos puntos para indicar que comience en ese elemento y después de los puntos el elemento en el que terminará, el cual no se incluirá. Así para obtener la primera y segunda columna de una matriz se puede usar mat[:, 0:2], recordando que el índice 2 no se incluye, solamente el 0 y 1.

Siendo este un método con bastantes posibilidades como se ha explicado en otra ocasión.

Código con los ejemplos

A continuación, se muestra un código con los ejemplos que se han visto durante la entrada.

import numpy as np

mat = np.arange(9).reshape((3,3))
# mat = [[0, 1, 2],
#        [3, 4, 5],
#        [6, 7, 8]]

mat[1, 2] # 5
mat[1]    # [3, 4, 5]
mat[1, :] # [3, 4, 5]
mat[:, 1] # [1, 4, 7]

mat.flat[5]   # 5
mat.T.flat[5] # 7

mat[:, 0:2]
# [[0, 1],
#  [3, 4],
#  [6, 7]]

Conclusiones

En esta ocasión se han explicados algunas de las formas que tenemos para acceder al i-ésimo elemento de una matriz multidimensional de NumPy. Siendo posible emplearlos para seleccionar escalares, filas, columnas o conjuntos de estos.