Iterace NumPy Array
Iterační pole
Iterace znamená procházet prvky jeden po druhém.
Protože se zabýváme vícerozměrnými poli v numpy, můžeme to udělat pomocí základní
for
smyčky pythonu.
Pokud iterujeme na 1-D poli, projde každý prvek jeden po druhém.
Příklad
Iterujte na prvcích následujícího 1-D pole:
import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
print(x)
Iterace 2-D polí
Ve 2-D poli projde všechny řádky.
Příklad
Iterujte na prvcích následujícího 2D pole:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
print(x)
Pokud iterujeme na n -D poli, projde n-1 dimenzí jeden po druhém.
Abychom vrátili skutečné hodnoty, skaláry, musíme iterovat pole v každé dimenzi.
Příklad
Iterujte na každém skalárním prvku 2-D pole:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x
in arr:
for y in x:
print(y)
Iterování 3-D polí
V 3-D poli projde všemi 2-D poli.
Příklad
Iterujte na prvcích následujícího 3D pole:
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)
Abychom vrátili skutečné hodnoty, skaláry, musíme iterovat pole v každé dimenzi.
Příklad
Iterujte dolů ke skalárům:
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)
Iterace polí pomocí nditer()
Funkce nditer()
je pomocná funkce, kterou lze použít od velmi základních až po velmi pokročilé iterace. Řeší některé základní problémy, se kterými se v iteraci setkáváme, pojďme si to projít na příkladech.
Iterace na každém skalárním prvku
V základních for
cyklech, při iteraci každým skalárem pole, musíme použít
n
for
smyček, což může být obtížné zapsat pro pole s velmi vysokou dimenzionalitou.
Příklad
Iterujte přes následující 3D pole:
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)
Iterující pole s různými typy dat
Můžeme použít op_dtypes
argument a předat mu očekávaný datový typ ke změně datového typu prvků při iteraci.
NumPy nemění datový typ prvku na místě (kde je prvek v poli), takže k provedení této akce potřebuje nějaký další prostor, tento prostor navíc se nazývá vyrovnávací paměť, a abychom jej mohli povolit, nditer()
předáme flags=['buffered']
.
Příklad
Iterujte pole jako řetězec:
import numpy as np
arr = np.array([1, 2, 3])
for x in
np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
print(x)
Iterace s různou velikostí kroku
Můžeme použít filtrování a následnou iteraci.
Příklad
Iterujte každý skalární prvek 2D pole a vynechejte 1 prvek:
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2]):
print(x)
Výčtová iterace pomocí ndenumerate()
Výčet znamená uvedení pořadového čísla věcí jeden po druhém.
Někdy při iteraci požadujeme odpovídající index prvku, ndenumerate()
pro tyto případy lze metodu použít.
Příklad
Výčet na následujících prvcích 1D polí:
import numpy as np
arr = np.array([1, 2, 3])
for idx, x in
np.ndenumerate(arr):
print(idx, x)
Příklad
Vyjmenujte následující prvky 2D pole:
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)