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í forsmyč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 forcyklech, 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_dtypesargument 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)