NumPy Array Iterating


Itererende skikkings

Iterasie beteken om elemente een vir een deur te gaan.

Soos ons te doen het met multi-dimensionele skikkings in numpy, kan ons dit doen deur die basiese forlus van luislang te gebruik.

As ons op 'n 1-D-skikking herhaal, sal dit een vir een deur elke element gaan.

Voorbeeld

Herhaal die elemente van die volgende 1-D skikking:

import numpy as np

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

for x in arr:
  print(x)

Itererende 2-D-skikkings

In 'n 2-D skikking sal dit deur al die rye gaan.

Voorbeeld

Herhaal die elemente van die volgende 2-D skikking:

import numpy as np

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

for x in arr:
  print(x)

As ons op 'n n -D skikking herhaal , sal dit een vir een deur n-1de dimensie gaan.

Om die werklike waardes, die skalare, terug te gee, moet ons die skikkings in elke dimensie herhaal.

Voorbeeld

Itereer op elke skalêre element van die 2-D-skikking:

import numpy as np

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

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


Itererende 3-D-skikkings

In 'n 3-D skikking sal dit deur al die 2-D skikkings gaan.

Voorbeeld

Herhaal die elemente van die volgende 3D-skikking:

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 die werklike waardes, die skalare, terug te gee, moet ons die skikkings in elke dimensie herhaal.

Voorbeeld

Herhaal tot by die skalare:

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)

Herhaal skikkings met behulp van nditer()

Die funksie nditer()is 'n hulpfunksie wat van baie basiese tot baie gevorderde iterasies gebruik kan word. Dit los 'n paar basiese kwessies op wat ons in iterasie in die gesig staar, laat ons dit deurgaan met voorbeelde.

Herhaal op elke skalêre element

In basiese forlusse, deur elke skalaar van 'n skikking te herhaal, moet ons n for lusse gebruik wat moeilik kan wees om te skryf vir skikkings met baie hoë dimensionaliteit.

Voorbeeld

Herhaal deur die volgende 3-D-skikking:

import numpy as np

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

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

Itererende skikking met verskillende datatipes

Ons kan op_dtypesargument gebruik en dit die verwagte datatipe deurgee om die datatipe van elemente te verander terwyl dit herhaal word.

NumPy verander nie die datatipe van die element in die plek nie (waar die element in 'n skikking is), dus het dit 'n ander spasie nodig om hierdie aksie uit te voer, daardie ekstra spasie word buffer genoem, en om dit te aktiveer in nditer()ons slaag flags=['buffered'].

Voorbeeld

Herhaal deur die skikking as 'n string:

import numpy as np

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

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

Iterasie met verskillende stapgroottes

Ons kan filter gebruik en gevolg deur iterasie.

Voorbeeld

Herhaal deur elke skalêre element van die 2D-skikking en slaan 1 element oor:

import numpy as np

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

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

Opgesomde iterasie Gebruik ndenumerate()

Opsomming beteken om die volgordenommer van iets een vir een te noem.

Soms benodig ons ooreenstemmende indeks van die element terwyl dit herhaal word, die ndenumerate()metode kan vir daardie gebruiksgevalle gebruik word.

Voorbeeld

Noem op die volgende 1D-skikkingselemente:

import numpy as np

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

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

Voorbeeld

Noem op die volgende 2D-skikking se elemente:

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)