Iteração de matriz NumPy


Iterando Arrays

Iterar significa passar pelos elementos um por um.

Como lidamos com arrays multidimensionais em numpy, podemos fazer isso usando o forloop básico de python.

Se iterarmos em um array 1-D, ele passará por cada elemento um por um.

Exemplo

Itere nos elementos da seguinte matriz 1-D:

import numpy as np

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

for x in arr:
  print(x)

Iterando arrays 2-D

Em uma matriz 2-D, ele passará por todas as linhas.

Exemplo

Itere nos elementos da seguinte matriz 2-D:

import numpy as np

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

for x in arr:
  print(x)

Se iterarmos em um array n -D, ele passará pela n-1ª dimensão um por um.

Para retornar os valores reais, os escalares, temos que iterar os arrays em cada dimensão.

Exemplo

Itere em cada elemento escalar do array 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 arrays 3D

Em uma matriz 3D, ele passará por todas as matrizes 2D.

Exemplo

Itere nos elementos da seguinte matriz 3D:

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 retornar os valores reais, os escalares, temos que iterar os arrays em cada dimensão.

Exemplo

Iterar até os 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 arrays usando nditer()

A função nditer()é uma função de ajuda que pode ser usada de iterações muito básicas a muito avançadas. Ele resolve alguns problemas básicos que enfrentamos na iteração, vamos passar por isso com exemplos.

Iterando em cada elemento escalar

Em forloops básicos, iterando através de cada escalar de um array, precisamos usar n for loops que podem ser difíceis de escrever para arrays com dimensionalidade muito alta.

Exemplo

Itere através da seguinte matriz 3D:

import numpy as np

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

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

Iterando array com diferentes tipos de dados

Podemos usar op_dtypeso argumento e passar o tipo de dados esperado para alterar o tipo de dados dos elementos durante a iteração.

O NumPy não altera o tipo de dados do elemento no local (onde o elemento está no array), portanto, ele precisa de algum outro espaço para realizar essa ação, esse espaço extra é chamado de buffer e, para habilitá-lo nditer(), passamos flags=['buffered'].

Exemplo

Iterar através do array como uma string:

import numpy as np

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

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

Iterando com tamanho de etapa diferente

Podemos usar filtragem e seguido de iteração.

Exemplo

Itere através de cada elemento escalar do array 2D pulando 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)

Iteração enumerada usando ndenumerate()

Enumeração significa mencionar o número de sequência de algumas coisas uma a uma.

Às vezes, exigimos o índice correspondente do elemento durante a iteração, o ndenumerate()método pode ser usado para esses casos de uso.

Exemplo

Enumere os seguintes elementos de matrizes 1D:

import numpy as np

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

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

Exemplo

Enumere os seguintes elementos do array 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)