Iteracja tablicy NumPy


Tablice iteracyjne

Iteracja oznacza przechodzenie przez elementy jeden po drugim.

Ponieważ mamy do czynienia z wielowymiarowymi tablicami w numpy, możemy to zrobić za pomocą podstawowej forpętli Pythona.

Jeśli będziemy iterować po tablicy 1-D, przejdzie ona przez każdy element jeden po drugim.

Przykład

Wykonaj iterację na elementach następującej tablicy 1-D:

import numpy as np

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

for x in arr:
  print(x)

Iterowanie tablic 2-D

W tablicy 2D przejdzie przez wszystkie wiersze.

Przykład

Wykonaj iterację na elementach następującej tablicy 2-D:

import numpy as np

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

for x in arr:
  print(x)

Jeśli wykonamy iterację na tablicy n -D, przejdzie ona przez n-1 wymiar jeden po drugim.

Aby zwrócić rzeczywiste wartości, skalary, musimy iterować tablice w każdym wymiarze.

Przykład

Wykonaj iterację na każdym elemencie skalarnym tablicy 2-D:

import numpy as np

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

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


Iterowanie tablic 3-D

W tablicy 3-D przejdzie przez wszystkie tablice 2-D.

Przykład

Wykonaj iterację na elementach następującej tablicy 3-D:

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)

Aby zwrócić rzeczywiste wartości, skalary, musimy iterować tablice w każdym wymiarze.

Przykład

Przejdź do skalarów:

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)

Iterowanie tablic za pomocą nditer()

Funkcja nditer()jest funkcją pomocniczą, której można używać od bardzo podstawowych do bardzo zaawansowanych iteracji. Rozwiązuje kilka podstawowych problemów, z którymi mamy do czynienia w iteracji, przejrzyjmy to na przykładach.

Iteracja na każdym elemencie skalarnym

W podstawowych forpętlach, iterując przez każdy skalar tablicy, musimy użyć n for pętli, które mogą być trudne do zapisania dla tablic o bardzo dużej wymiarowości.

Przykład

Przejdź przez następującą tablicę 3D:

import numpy as np

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

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

Tablica iteracyjna z różnymi typami danych

Możemy użyć op_dtypesargumentu i przekazać mu oczekiwany typ danych, aby zmienić typ danych elementów podczas iteracji.

NumPy nie zmienia typu danych elementu in-place (gdzie element jest w tablicy), więc potrzebuje trochę innej przestrzeni do wykonania tej akcji, ta dodatkowa przestrzeń nazywa się buffer, a żeby ją włączyć nditer()przekazujemy flags=['buffered'].

Przykład

Przeprowadź iterację po tablicy jako ciąg:

import numpy as np

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

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

Iteracja z różnymi rozmiarami kroku

Możemy użyć filtrowania i następującej po nim iteracji.

Przykład

Wykonaj iterację przez każdy element skalarny tablicy 2D, pomijając 1 element:

import numpy as np

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

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

Wyliczona iteracja przy użyciu ndenumerate()

Wyliczenie oznacza wymienianie numeru sekwencyjnego czegoś jeden po drugim.

Czasami podczas iteracji wymagamy odpowiedniego indeksu elementu, ndenumerate()metoda może być używana dla tych przypadków użycia.

Przykład

Wymień następujące elementy tablic 1D:

import numpy as np

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

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

Przykład

Wymień następujące elementy tablicy 2D:

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)