Iteración de matriz NumPy


Iterando arreglos

Iterar significa pasar por los elementos uno por uno.

Como tratamos con matrices multidimensionales en numpy, podemos hacerlo usando el forbucle básico de python.

Si iteramos en una matriz 1-D, pasará por cada elemento uno por uno.

Ejemplo

Iterar sobre los elementos de la siguiente matriz 1-D:

import numpy as np

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

for x in arr:
  print(x)

Iterando arreglos 2-D

En una matriz 2D, recorrerá todas las filas.

Ejemplo

Iterar sobre los elementos de la siguiente matriz 2-D:

import numpy as np

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

for x in arr:
  print(x)

Si iteramos en una matriz n -D, pasará por la dimensión n-1 una por una.

Para devolver los valores reales, los escalares, tenemos que iterar las matrices en cada dimensión.

Ejemplo

Iterar en cada elemento escalar de la matriz 2-D:

import numpy as np

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

for x in arr:
  for y in x:
    print(y)


Iterando arreglos 3-D

En una matriz 3D, pasará por todas las matrices 2D.

Ejemplo

Iterar sobre los elementos de la siguiente matriz 3-D:

import numpy as np

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

for x in arr:
  print(x)

Para devolver los valores reales, los escalares, tenemos que iterar las matrices en cada dimensión.

Ejemplo

Iterar hasta los escalares:

import numpy as np

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

for x in arr:
  for y in x:
    for z in y:
      print(z)

Iterando arreglos usando nditer()

La función nditer()es una función de ayuda que se puede utilizar desde iteraciones muy básicas hasta muy avanzadas. Resuelve algunos problemas básicos que enfrentamos en la iteración, analicémoslo con ejemplos.

Iterando en cada elemento escalar

En los bucles básicos for, al iterar a través de cada escalar de una matriz, necesitamos usar n for bucles que pueden ser difíciles de escribir para matrices con una dimensionalidad muy alta.

Ejemplo

Iterar a través de la siguiente matriz 3-D:

import numpy as np

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

for x in np.nditer(arr):
  print(x)

Matriz de iteración con diferentes tipos de datos

Podemos usar op_dtypesel argumento y pasarle el tipo de datos esperado para cambiar el tipo de datos de los elementos durante la iteración.

NumPy no cambia el tipo de datos del elemento en el lugar (donde el elemento está en la matriz), por lo que necesita otro espacio para realizar esta acción, ese espacio adicional se llama búfer, y para habilitarlo nditer()pasamos flags=['buffered'].

Ejemplo

Iterar a través de la matriz como una cadena:

import numpy as np

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

for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
  print(x)

Iterando con diferente tamaño de paso

Podemos usar filtrado y seguido de iteración.

Ejemplo

Iterar a través de cada elemento escalar de la matriz 2D omitiendo 1 elemento:

import numpy as np

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

for x in np.nditer(arr[:, ::2]):
  print(x)

Iteración enumerada usando ndenumerate()

Enumeración significa mencionar el número de secuencia de algo uno por uno.

A veces requerimos el índice correspondiente del elemento durante la iteración, el ndenumerate()método se puede usar para esos casos de uso.

Ejemplo

Enumerar en los siguientes elementos de matrices 1D:

import numpy as np

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

for idx, x in np.ndenumerate(arr):
  print(idx, x)

Ejemplo

Enumere los siguientes elementos de la matriz 2D:

import numpy as np

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

for idx, x in np.ndenumerate(arr):
  print(idx, x)