آموزش تکرار در یک آرایه در NumPy

3 سال پیش
آموزش تکرار در یک آرایه در NumPy

آموزش تکرار در یک آرایه در NumPy

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش تکرار در یک آرایه در NumPy خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون

بسته NumPy شامل یک شی تکرار کننده numpy.nditer است. این یک شی تکرار کننده چند بعدی کارآمد است که با استفاده از آن امکان  وجود دارد. هر عنصر از یک آرایه با استفاده از رابط استاندارد Iterator Python بازدید می شود.

اجازه دهید با استفاده از تابع () arange یک آرایه ۳X4 ایجاد کنیم و با استفاده از nditer آن را تکرار کنیم.

مثال ۱

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,

 

خروجی این برنامه به شرح زیر است –

Original array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Modified array is:
۰ ۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰ ۵۵

 

مثال ۲

ترتیب تکرار بدون در نظر گرفتن ترتیب خاصی برای مطابقت با طرح حافظه آرایه انتخاب می شود. این را می توان با تکرار در جا به جایی آرایه فوق مشاهده کرد.

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,

 

خروجی برنامه فوق به شرح زیر است –

Original array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Transpose of the original array is:
[[ ۰ ۲۰ ۴۰]
 [ ۵ ۲۵ ۴۵]
 [۱۰ ۳۰ ۵۰]
 [۱۵ ۳۵ ۵۵]]

Modified array is:
۰ ۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰ ۵۵

 

دستور تکرار

اگر همان عناصر با استفاده از ترتیب F-style ذخیره شوند ، تکرار کننده روش کارآمدتر تکرار را از یک آرایه انتخاب می کند.

مثال ۱

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,

 

خروجی آن به شرح زیر است –

Original array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Transpose of the original array is:
[[ ۰ ۲۰ ۴۰]
 [ ۵ ۲۵ ۴۵]
 [۱۰ ۳۰ ۵۰]
 [۱۵ ۳۵ ۵۵]]

Sorted in C-style order:
[[ ۰ ۲۰ ۴۰]
 [ ۵ ۲۵ ۴۵]
 [۱۰ ۳۰ ۵۰]
 [۱۵ ۳۵ ۵۵]]
۰ ۲۰ ۴۰ ۵ ۲۵ ۴۵ ۱۰ ۳۰ ۵۰ ۱۵ ۳۵ ۵۵

Sorted in F-style order:
[[ ۰ ۲۰ ۴۰]
 [ ۵ ۲۵ ۴۵]
 [۱۰ ۳۰ ۵۰]
 [۱۵ ۳۵ ۵۵]]
۰ ۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰ ۵۵

 

مثال ۲

می توان با ذکر صریح آن ، جسم nditer را وادار به استفاده از یک ترتیب خاص کرد.

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,

 

خروجی آن خواهد بود –

Original array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Sorted in C-style order:
۰ ۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰ ۵۵

Sorted in F-style order:
۰ ۲۰ ۴۰ ۵ ۲۵ ۴۵ ۱۰ ۳۰ ۵۰ ۱۵ ۳۵ ۵۵

 

تغییر مقادیر آرایه

شی nditer دارای پارامتر اختیاری دیگری به نام op_flags است. مقدار پیش فرض آن فقط خواندنی است ، اما می تواند روی حالت خواندن-نوشتن یا نوشتن تنظیم شود. با استفاده از این تکرارکننده ، تغییر عناصر آرایه امکان پذیر خواهد شد.

مثال

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

 

خروجی آن به شرح زیر است –

Original array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Modified array is:
[[ ۰ ۱۰ ۲۰ ۳۰]
 [ ۴۰ ۵۰ ۶۰ ۷۰]
 [ ۸۰ ۹۰ ۱۰۰ ۱۱۰]]

 

حلقه خارجی

سازنده کلاس nditer دارای یک پارامتر “flags” است که می تواند مقادیر زیر را بدست آورد –

پارامترها
۱ c_index

شاخص C_order قابل پیگیری است

۲ f_index

شاخص Fortran_order پیگیری می شود

۳ multi-index

نوع شاخص ها با یک بار در هر تکرار قابل پیگیری است

۴ external_loop

مقادیر باعث می شود که آرایه های یک بعدی با مقادیر متعدد به جای آرایه صفر بعدی قرار گیرند

 

مثال

در مثال زیر، آرایه های یک بعدی مربوط به هر ستون توسط تکرار کننده مرور می شود.

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,

 

خروجی به شرح زیر است –

Original array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Modified array is:
[ ۰ ۲۰ ۴۰] [ ۵ ۲۵ ۴۵] [۱۰ ۳۰ ۵۰] [۱۵ ۳۵ ۵۵]

 

پخش تکرار

اگر دو آرایه قابل پخش باشد ، یک شی nditer ترکیبی قادر به تکرار همزمان آنها است. با فرض اینکه آرایه a دارای ابعاد ۳X4 است و یک آرایه دیگر نیز به ابعاد ۱X4 وجود دارد ، از تکرار کننده نوع زیر استفاده می شود (آرایه b به اندازه a پخش می شود).

مثال

 

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

 

خروجی به شرح زیر است –

First array is:
[[ ۰ ۵ ۱۰ ۱۵]
 [۲۰ ۲۵ ۳۰ ۳۵]
 [۴۰ ۴۵ ۵۰ ۵۵]]

Second array is:
[۱ ۲ ۳ ۴]

Modified array is:
۰:۱ ۵:۲ ۱۰:۳ ۱۵:۴ ۲۰:۱ ۲۵:۲ ۳۰:۳ ۳۵:۴ ۴۰:۱ ۴۵:۲ ۵۰:۳ ۵۵:۴

 

منبع.

 

 

لیست جلسات قبل آموزش NumPy

  1. آموزش NumPy
  2. معرفی NumPy
  3. آموزش محیط کار NumPy
  4. آموزش شی Ndarray در NumPy
  5. آموزش انواع داده ها در NumPy
  6. آموزش ویژگی های آرایه در NumPy
  7. آموزش روال ایجاد آرایه در NumPy
  8. آموزش ایجاد آرایه از داده های موجود در NumPy
  9. آموزش ایجاد آرایه از محدوده های عددی در NumPy
  10. آموزش شاخص گذاری و برش در NumPy
  11. آموزش شاخص گذاری پیشرفته در NumPy
  12. آموزش Broadcasting در NumPy
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه