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
for
loop 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 for
loops 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_dtypes
o 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)