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 for
basislus 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 for
basislussen, 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_dtypes
argument 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)