Iterazione dell'array NumPy


Array iterativi

Iterare significa passare attraverso gli elementi uno per uno.

Poiché ci occupiamo di array multidimensionali in numpy, possiamo farlo usando il forciclo di base di python.

Se ripetiamo su un array 1-D, passerà attraverso ogni elemento uno per uno.

Esempio

Iterare sugli elementi della seguente matrice 1-D:

import numpy as np

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

for x in arr:
  print(x)

Iterazione di array 2D

In un array 2-D passerà attraverso tutte le righe.

Esempio

Iterare sugli elementi della seguente matrice 2D:

import numpy as np

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

for x in arr:
  print(x)

Se iteriamo su un array n -D, passerà attraverso la n-1a dimensione uno per uno.

Per restituire i valori effettivi, gli scalari, dobbiamo iterare gli array in ogni dimensione.

Esempio

Iterare su ogni elemento scalare dell'array 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)


Iterazione di array 3D

In un array 3D passerà attraverso tutti gli array 2D.

Esempio

Iterare sugli elementi della seguente matrice 3D:

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)

Per restituire i valori effettivi, gli scalari, dobbiamo iterare gli array in ogni dimensione.

Esempio

Iterare fino agli scalari:

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)

Iterare gli array usando nditer()

La funzione nditer()è una funzione di aiuto che può essere utilizzata da iterazioni molto semplici a molto avanzate. Risolve alcuni problemi di base che affrontiamo nell'iterazione, esaminiamolo con esempi.

Iterazione su ogni elemento scalare

Nei forloop di base, iterando attraverso ogni scalare di un array è necessario utilizzare n for loop che possono essere difficili da scrivere per array con dimensionalità molto elevata.

Esempio

Iterare attraverso la seguente matrice 3D:

import numpy as np

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

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

Array iterativo con diversi tipi di dati

Possiamo usare l' op_dtypesargomento e passargli il tipo di dati previsto per modificare il tipo di dati degli elementi durante l'iterazione.

NumPy non cambia il tipo di dati dell'elemento sul posto (dove l'elemento è nell'array), quindi ha bisogno di altro spazio per eseguire questa azione, quello spazio extra è chiamato buffer e per abilitarlo in nditer()passiamo flags=['buffered'].

Esempio

Scorri l'array come una stringa:

import numpy as np

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

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

Iterazione con diverse dimensioni del passaggio

Possiamo usare il filtraggio e seguito dall'iterazione.

Esempio

Iterare attraverso ogni elemento scalare dell'array 2D saltando 1 elemento:

import numpy as np

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

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

Iterazione enumerata usando ndenumerate()

Enumerazione significa menzionare il numero di sequenza di qualcosa uno per uno.

A volte è necessario l'indice corrispondente dell'elemento durante l'iterazione, il ndenumerate()metodo può essere utilizzato per quei casi d'uso.

Esempio

Enumera i seguenti elementi di array 1D:

import numpy as np

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

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

Esempio

Enumera sui seguenti elementi dell'array 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)