NumPy -array itereren


Itererende arrays

Itereren betekent dat je de elementen één voor één doorloopt.

Omdat we omgaan met multidimensionale arrays in numpy, kunnen we dit doen met behulp van de forbasislus van python.

Als we itereren op een 1-D-array, gaat deze één voor één door elk element.

Voorbeeld

Herhaal de elementen van de volgende 1-D-array:

import numpy as np

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

for x in arr:
  print(x)

2D-arrays herhalen

In een 2D-array gaat het door alle rijen.

Voorbeeld

Herhaal de elementen van de volgende 2D-array:

import numpy as np

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

for x in arr:
  print(x)

Als we itereren op een n -D-array, gaat deze één voor één door de n-1e dimensie.

Om de werkelijke waarden, de scalairen, terug te geven, moeten we de arrays in elke dimensie herhalen.

Voorbeeld

Herhaal elk scalair element van de 2D-array:

import numpy as np

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

for x in arr:
  for y in x:
    print(y)


3D-arrays herhalen

In een 3D-array gaat het door alle 2D-arrays.

Voorbeeld

Herhaal de elementen van de volgende 3D-array:

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)

Om de werkelijke waarden, de scalairen, terug te geven, moeten we de arrays in elke dimensie herhalen.

Voorbeeld

Herhaal tot aan de scalairen:

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)

Arrays herhalen met nditer()

De functie nditer()is een hulpfunctie die kan worden gebruikt van zeer eenvoudige tot zeer geavanceerde iteraties. Het lost enkele basisproblemen op waarmee we bij iteratie worden geconfronteerd, laten we het doornemen met voorbeelden.

Itereren op elk scalair element

In forbasislussen, waarbij we door elke scalair van een array itereren, moeten we n for lussen gebruiken die moeilijk te schrijven kunnen zijn voor arrays met een zeer hoge dimensionaliteit.

Voorbeeld

Doorloop de volgende 3D-array:

import numpy as np

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

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

Iteratie-array met verschillende gegevenstypen

We kunnen op_dtypesargument gebruiken en het verwachte datatype doorgeven om het datatype van elementen te wijzigen tijdens het itereren.

NumPy verandert het gegevenstype van het element op zijn plaats niet (waar het element zich in de array bevindt), dus het heeft een andere ruimte nodig om deze actie uit te voeren, die extra ruimte wordt buffer genoemd, en om het in te schakelen nditer()passen we flags=['buffered'].

Voorbeeld

Doorloop de array als een string:

import numpy as np

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

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

Itereren met verschillende stapgroottes

We kunnen filtering gebruiken en gevolgd door iteratie.

Voorbeeld

Herhaal elk scalair element van de 2D-array en sla 1 element over:

import numpy as np

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

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

Genummerde iteratie met behulp van ndenumerate()

Opsomming betekent het één voor één vermelden van het volgnummer van iets.

Soms hebben we een overeenkomstige index van het element nodig tijdens het itereren, de ndenumerate()methode kan voor die usecases worden gebruikt.

Voorbeeld

Geef een opsomming van de volgende 1D-arrays-elementen:

import numpy as np

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

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

Voorbeeld

Noem de volgende elementen van de 2D-array:

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)