NumPy - Dizi Üzerinde Yineleme

NumPy paketi bir yineleyici nesnesi içerir numpy.nditer. Bir dizi üzerinde yinelemenin mümkün olduğu verimli, çok boyutlu bir yineleyici nesnesidir. Bir dizinin her bir öğesi, Python'un standart Yineleyici arayüzü kullanılarak ziyaret edilir.

Arange () işlevini kullanarak 3X4 bir dizi oluşturalım ve bunu kullanarak yineleyelim. nditer.

örnek 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,

Bu programın çıktısı aşağıdaki gibidir -

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

Örnek 2

Yineleme sırası, belirli bir sıralama dikkate alınmadan bir dizinin bellek düzeniyle eşleşecek şekilde seçilir. Bu, yukarıdaki dizinin devrikini yineleyerek görülebilir.

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,

Yukarıdaki programın çıktısı aşağıdaki gibidir -

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

Yineleme Sırası

Aynı öğeler F-stili düzen kullanılarak depolanırsa, yineleyici bir dizi üzerinde yinelemenin daha verimli yolunu seçer.

örnek 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,

Çıktısı aşağıdaki gibi olacaktır -

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

Örnek 2

Zorlamak mümkündür nditer açıkça bahsederek belirli bir siparişin kullanılmasına itiraz edin.

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,

Çıktısı -

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

Dizi Değerlerini Değiştirme

nditer nesnenin adında başka bir isteğe bağlı parametresi var op_flags. Varsayılan değeri salt okunurdur, ancak okuma-yazma veya salt yazma moduna ayarlanabilir. Bu, bu yineleyiciyi kullanarak dizi elemanlarının değiştirilmesini sağlayacaktır.

Misal

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

Çıktısı aşağıdaki gibidir -

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]]

Harici Döngü

Nditer sınıfı yapıcısının bir ‘flags’ aşağıdaki değerleri alabilen parametre -

Sr.No. Parametre ve Açıklama
1

c_index

C_order endeksi izlenebilir

2

f_index

Fortran_order endeksi izleniyor

3

multi-index

Her yineleme için bir dizin türü izlenebilir

4

external_loop

Verilen değerlerin sıfır boyutlu dizi yerine birden çok değeri olan tek boyutlu diziler olmasına neden olur

Misal

Aşağıdaki örnekte, her bir sütuna karşılık gelen tek boyutlu diziler yineleyici tarafından geçilir.

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,

Çıktı aşağıdaki gibidir -

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]

Yayın Yineleme

İki dizi ise broadcastable, birleşik nditernesne eşzamanlı olarak bunları yineleyebilir. Bir dizi varsayarsaka 3X4 boyutuna sahip ve başka bir dizi var b 1X4 boyutunda, aşağıdaki türde yineleyici kullanılır (dizi b boyutuna yayınlanıyor a).

Misal

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),

Çıktısı aşağıdaki gibi olacaktır -

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