domingo, 12 de abril de 2020

Iterando matrizes com a biblioteca NumPy

Iterando matrizes com a biblioteca NumPy


Iterar é percorrer os elementos de um objeto um após o outro. Iterar uma matriz da numpy pode ser feita com o loop for. O loop for também pode percorrer matrizes multidimensionais, é só aninhar os loop. Se for usado apenas um loop for numa matriz 3D o resultado será algumas matrizes 2D. Nas matriz com apenas uma dimensão podemos acessar os elementos da matriz um por um só com um laço for.
Exemplo
import numpy as np

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

for i in array:
  print(i)

Iterando numa array 2D

Iterando com um único laço for, numa matriz com duas dimensões, o resultado será uma matrizes com uma dimensão em cada execução do laço.
Exemplo
import numpy as np

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

for i in array:
  print(i)

Iterando numa array 3D

Iterando com um único laço for, numa matriz com três dimensões, o resultado será uma matriz com duas dimensões em cada execução do laço.
Exemplo
import numpy as np

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

for i in array:
  print(i)

Cada elemento de uma array multidimensional

Para acessar cada elemento de uma matriz multidimensional, precisamos criar um laço for para cada nível. Por exemplo, para acessar todos os elementos de uma matriz com duas dimensões precisamos utilizar dois laços for. Um que retorna uma matriz com uma dimensão, e outro que itera sobre essa matriz retornada pelo primeiro laço for. Do mesmo jeito é feito com matriz com três dimensões.
Exemplo: Array com duas dimensões
import numpy as np

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

for x in array:
  for y in x:
    print(y)
Exemplo: Array com três dimensões
import numpy as np

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

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

Iterando arrays usando a função nditer

Com a função nditer você não precisar se preocupar com quantas dimensões uma matriz tem. Imagine que a função nditer retorna uma matriz com uma dimensão. Não importa o numero de dimensões da matriz passada como argumento para a função. O resultado vai ser sempre uma matriz com uma única dimensão. Com essa matriz com uma dimensão fica fácil acessar cada elemento da matriz com laço for.
Exemplo
import numpy as np

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

for i in np.nditer(array):
  print(i)

Iterando saltando elementos

Se por algum motivo precisamos saltar um ou mais elementos podemos utilizar os exemplos abaixo.
Exemplo: Arrays com uma dimensão
import numpy as np

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

for x in np.nditer(array[::2]):
  print(x)
Exemplo: Arrays com duas dimensões
import numpy as np

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

for x in np.nditer(array[:, ::2]):
  print(x)
Exemplo: Arrays com três dimensões
import numpy as np

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

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

Index da iteração

Se durante uma iteração você precisar do index do objeto iterado a função ndenumerate pode ser usada. A função ndenumerate retorna uma tupla com o index do objeto e o próprio objeto.
Exemplo
import numpy as np

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

for index, i in np.ndenumerate(array):
  print(index, i)
Nesse exemplo a tupla retornada pela função ndenumerate tem três números, cada um referente ao index de cada matriz. Com uma matriz de duas dimensões a tupla teria dois números e com uma matriz de uma dimensão, teria apenas um numero.

0 comentários:

Postar um comentário