آموزش تکرار در یک آرایه در NumPy
آموزش تکرار در یک آرایه در NumPy
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش تکرار در یک آرایه در NumPy خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون
بسته NumPy شامل یک شی تکرار کننده numpy.nditer است. این یک شی تکرار کننده چند بعدی کارآمد است که با استفاده از آن امکان وجود دارد. هر عنصر از یک آرایه با استفاده از رابط استاندارد Iterator Python بازدید می شود.
اجازه دهید با استفاده از تابع () arange یک آرایه 3X4 ایجاد کنیم و با استفاده از nditer آن را تکرار کنیم.
مثال 1
1 2 3 4 5 6 7 8 9 10 11 |
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, |
خروجی این برنامه به شرح زیر است –
1 2 3 4 5 6 7 |
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 |
مثال 2
ترتیب تکرار بدون در نظر گرفتن ترتیب خاصی برای مطابقت با طرح حافظه آرایه انتخاب می شود. این را می توان با تکرار در جا به جایی آرایه فوق مشاهده کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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, |
خروجی برنامه فوق به شرح زیر است –
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 |
دستور تکرار
اگر همان عناصر با استفاده از ترتیب F-style ذخیره شوند ، تکرار کننده روش کارآمدتر تکرار را از یک آرایه انتخاب می کند.
مثال 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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, |
خروجی آن به شرح زیر است –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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 |
مثال 2
می توان با ذکر صریح آن ، جسم nditer را وادار به استفاده از یک ترتیب خاص کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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, |
خروجی آن خواهد بود –
1 2 3 4 5 6 7 8 9 10 |
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 |
تغییر مقادیر آرایه
شی nditer دارای پارامتر اختیاری دیگری به نام op_flags است. مقدار پیش فرض آن فقط خواندنی است ، اما می تواند روی حالت خواندن-نوشتن یا نوشتن تنظیم شود. با استفاده از این تکرارکننده ، تغییر عناصر آرایه امکان پذیر خواهد شد.
مثال
1 2 3 4 5 6 7 8 9 10 11 |
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 |
خروجی آن به شرح زیر است –
1 2 3 4 5 6 7 8 9 |
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]] |
حلقه خارجی
سازنده کلاس nditer دارای یک پارامتر “flags” است که می تواند مقادیر زیر را بدست آورد –
پارامترها | |
---|---|
1 | c_index
شاخص C_order قابل پیگیری است |
2 | f_index
شاخص Fortran_order پیگیری می شود |
3 | multi-index
نوع شاخص ها با یک بار در هر تکرار قابل پیگیری است |
4 | external_loop
مقادیر باعث می شود که آرایه های یک بعدی با مقادیر متعدد به جای آرایه صفر بعدی قرار گیرند |
مثال
در مثال زیر، آرایه های یک بعدی مربوط به هر ستون توسط تکرار کننده مرور می شود.
1 2 3 4 5 6 7 8 9 10 11 |
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, |
خروجی به شرح زیر است –
1 2 3 4 5 6 7 |
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] |
پخش تکرار
اگر دو آرایه قابل پخش باشد ، یک شی nditer ترکیبی قادر به تکرار همزمان آنها است. با فرض اینکه آرایه a دارای ابعاد 3X4 است و یک آرایه دیگر نیز به ابعاد 1X4 وجود دارد ، از تکرار کننده نوع زیر استفاده می شود (آرایه b به اندازه a پخش می شود).
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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), |
خروجی به شرح زیر است –
1 2 3 4 5 6 7 8 9 10 |
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 |
لیست جلسات قبل آموزش NumPy
- آموزش NumPy
- معرفی NumPy
- آموزش محیط کار NumPy
- آموزش شی Ndarray در NumPy
- آموزش انواع داده ها در NumPy
- آموزش ویژگی های آرایه در NumPy
- آموزش روال ایجاد آرایه در NumPy
- آموزش ایجاد آرایه از داده های موجود در NumPy
- آموزش ایجاد آرایه از محدوده های عددی در NumPy
- آموزش شاخص گذاری و برش در NumPy
- آموزش شاخص گذاری پیشرفته در NumPy
- آموزش Broadcasting در NumPy
دیدگاه شما