NumPy - Iterieren über Array

Das NumPy-Paket enthält ein Iteratorobjekt numpy.nditer. Es ist ein effizientes mehrdimensionales Iteratorobjekt, mit dem über ein Array iteriert werden kann. Jedes Element eines Arrays wird über die Standard-Iterator-Schnittstelle von Python besucht.

Lassen Sie uns ein 3X4-Array mit der Funktion arange () erstellen und mit iterieren nditer.

Beispiel 1

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)

print 'Original array is:'
print a
print '\n'

print 'Modified array is:'
for x in np.nditer(a):
   print x,

Die Ausgabe dieses Programms ist wie folgt:

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55

Beispiel 2

Die Reihenfolge der Iteration wird so gewählt, dass sie mit dem Speicherlayout eines Arrays übereinstimmt, ohne eine bestimmte Reihenfolge zu berücksichtigen. Dies kann durch Iterieren über die Transponierte des obigen Arrays gesehen werden.

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 
   
print 'Original array is:'
print a 
print '\n'  
   
print 'Transpose of the original array is:' 
b = a.T 
print b 
print '\n'  
   
print 'Modified array is:' 
for x in np.nditer(b): 
   print x,

Die Ausgabe des obigen Programms ist wie folgt:

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Transpose of the original array is:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]

Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55

Iterationsreihenfolge

Wenn dieselben Elemente in der Reihenfolge F gespeichert werden, wählt der Iterator die effizientere Methode zum Iterieren über ein Array.

Beispiel 1

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'

print 'Transpose of the original array is:'
b = a.T
print b
print '\n'

print 'Sorted in C-style order:'
c = b.copy(order = 'C')
print c
for x in np.nditer(c):
   print x,

print '\n'

print 'Sorted in F-style order:'
c = b.copy(order = 'F')
print c
for x in np.nditer(c):
   print x,

Seine Ausgabe wäre wie folgt -

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Transpose of the original array is:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]

Sorted in C-style order:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0 20 40 5 25 45 10 30 50 15 35 55

Sorted in F-style order:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0 5 10 15 20 25 30 35 40 45 50 55

Beispiel 2

Es ist möglich zu erzwingen nditer Einwände gegen die Verwendung einer bestimmten Reihenfolge durch ausdrückliche Erwähnung.

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'Original array is:' 
print a 
print '\n'  

print 'Sorted in C-style order:' 
for x in np.nditer(a, order = 'C'): 
   print x,  
print '\n' 

print 'Sorted in F-style order:' 
for x in np.nditer(a, order = 'F'): 
   print x,

Seine Ausgabe wäre -

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Sorted in C-style order:
0 5 10 15 20 25 30 35 40 45 50 55

Sorted in F-style order:
0 20 40 5 25 45 10 30 50 15 35 55

Ändern von Array-Werten

Das nditer Objekt hat einen anderen optionalen Parameter namens op_flags. Der Standardwert ist schreibgeschützt, kann jedoch auf schreibgeschützt oder schreibgeschützt eingestellt werden. Dadurch können Array-Elemente mit diesem Iterator geändert werden.

Beispiel

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'

for x in np.nditer(a, op_flags = ['readwrite']):
   x[...] = 2*x
print 'Modified array is:'
print a

Seine Ausgabe ist wie folgt -

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
[[ 0 10 20 30]
 [ 40 50 60 70]
 [ 80 90 100 110]]

Externe Schleife

Der nditer-Klassenkonstruktor hat a ‘flags’ Parameter, der die folgenden Werte annehmen kann -

Sr.Nr. Parameter & Beschreibung
1

c_index

Der C_order-Index kann verfolgt werden

2

f_index

Der Fortran_order-Index wird verfolgt

3

multi-index

Der Indextyp mit einem pro Iteration kann verfolgt werden

4

external_loop

Bewirkt, dass die angegebenen Werte eindimensionale Arrays mit mehreren Werten anstelle eines nulldimensionalen Arrays sind

Beispiel

Im folgenden Beispiel werden eindimensionale Arrays, die jeder Spalte entsprechen, vom Iterator durchlaufen.

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'Original array is:' 
print a 
print '\n'  

print 'Modified array is:' 
for x in np.nditer(a, flags = ['external_loop'], order = 'F'):
   print x,

Die Ausgabe ist wie folgt -

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]

Rundfunkiteration

Wenn zwei Arrays sind broadcastable, eine kombinierte nditerObjekt kann sie gleichzeitig durchlaufen. Angenommen, ein Arraya hat die Dimension 3X4 und es gibt ein anderes Array b der Dimension 1X4 wird der Iterator des folgenden Typs verwendet (Array b wird auf Größe von gesendet a).

Beispiel

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'First array is:' 
print a 
print '\n'  

print 'Second array is:' 
b = np.array([1, 2, 3, 4], dtype = int) 
print b  
print '\n' 

print 'Modified array is:' 
for x,y in np.nditer([a,b]): 
   print "%d:%d" % (x,y),

Seine Ausgabe wäre wie folgt -

First array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Second array is:
[1 2 3 4]

Modified array is:
0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4