آرایه چیست؟
در نامپای آرایه ابزار اصلی نگهداری دادهها و انجام عملیات (محاسبات) ریاضی روی آن است. برای این که آرایه را بهتر درک کنیم میتوانیم آرایه را همان لیست پایتون در نظر بگیریم. در واقع آرایه عنصری است که چندین داده را در کنار هم نگه میدارد. همان طور که در لیستها، لیستهای ساده و تو در تو داشتیم. در آرایهها نیز این موضوع برقرار است. اما در آرایهها اگر آرایه ما خطی باشد به آن بردار میگوییم و اگر بخواهیم همانند لیستهای تو در تو داشته باشیم به آن آرایه چند بعدی میگوییم. به طور کلی به میتوانیم برای تمام آرایهها بعد در نظر بگیریم مثل یک بعدی و دو بعدی و سه بعدی و ... .
نکته: بر خلاف لیستها در پایتون که دادهها میتوانستند از انواع مختلفی باشند، در آرایهها تمام دادهها باید از یک نوع باشند.
ساخت آرایه
برای ساخت یک آرایه میتوانیم از تابع array نامپای استفاده کنیم.
یکی از روشهای ساخت آرایه، ساخت آرایه از روی لیست است در واقع به تابع array یک لیست به عنوان ورودی میدهیم و آرایه متناظر آن ساخته میشود.
در کد زیر یک آرایه تک بعدی میسازیم.
np.array([1, 10, 7])
خروجی کد بالا:
array([ 1, 10, 7])
در زیر یک آرایه دو بعدی میسازیم.
np.array([[2, 5],
[4, 8],
[9, 1]])
خروجی کد بالا:
array([[2, 5],
[4, 8],
[9, 1]])
بیان کردیم که نوع داده ها باید یکسان باشد. اگر نوع دادهها یکسان نباشد، نوع تمام دادهها به طور اتومات به نوع داده قابل تبدیل، تبدیل میشود.
مثلا اگر در دادهها یک داده عدد صحیح باشد و یک داده اعشاری باشد کل دادهها به عدد اعشاری تغییر میکنند.
np.array([[2, 4],
[1.2 , 8],
[5, 9]])
خروجی کد بالا:
array([[2. , 4. ],
[1.2, 8. ],
[5. , 9. ]])
مشاهده میکنیم که تمام دادهها از نوع عدد اعشاری شدند.
اگر در دادهها یک داده رشته باشد و کل دادهها به رشته تغییر میکنند.
np.array([[4.1, 9],
['python', 12]])
خروجی کد بالا:
array([['4.1', '9'],
['python', '12']], dtype='<U32')
مشاهده میکنیم که تمام دادهها به رشته تغییر کردند.
نکته: ما میتوانیم تمام آرایههای ساخته شده در بالا را درون یک متغیر بریزیم.
در خروجی کد بالا مشاهده میکنیم که کلید واژه dtype نوشته شده است. این کلید واژه مشخص میکند که نوع آرایه چیست. در حالتی که دادههای ما عدد اعشازی 64 بیتی باشند یا عدد صحیح 32 بیتی این کلید واژه در خروجی نشان داده نمیشود. حتی میتوانیم با استفاده از کلیدواژه type نوع یک آرایه را در هنگام ساخت آن تعیین کنیم. به صورت زیر:
np.array([2, 1, 9, 10], dtype=np.float32)
در مثال بالا با این که دادههای موجود در لیست از نوع عدد صحیح هستند اما چون با دستور dtype نوع آن را به عدد اعشاری 32 بیتی تغییر دادیم، پس دادهها به این نوع ذخیره میشوند.
خروجی کد بالا:
array([ 2., 1., 9., 10.], dtype=float32)
ساخت آرایههای از پیش آماده
در بخش قبل آرایههایی با دادههای دلخواه میساختیم در نامپای میتوانیم با استفاده از توابعی آرایههایی از پیش آماده بسازیم.
ساخت آرایه یک بعدی تمام صفر:
np.zeros(4)
خروجی کد بالا:
array([0., 0., 0., 0.])
ساخت آرایه دو بعدی تمام صفر:
np.zeros((2, 4))
خروجی کد بالا:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.]])
ساخت آرایه تمام یک:
np.ones((3, 5))
خروجی کد بالا:
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
ساخت آرایهای با اعضای یکسان و دلخواه (یک بعدی):
np.full(5, 4)
خروجی کد بالا:
array([4, 4, 4, 4, 4])
ساخت آرایهای با اعضای یکسان و دلخواه (چند بعدی):
np.full((4, 2), 5)
نکته: در پرانتز ابعاد مورد نظر خود را وارد میکنیم و در ادامه عدد یا داده مورد نظر خود را وارد میکنیم.
خروجی کد بالا:
array([[5, 5],
[5, 5],
[5, 5],
[5, 5]])
ساخت آرایه بازهای از اعداد (در کد زیر بازه 1 تا 20 را ساختهایم):
np.arange(1, 21)
نکته: حتما انتهای بازه باید یک واحد از چیزی که میخواهیم بیشتر باشد.
خروجی کد بالا:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
ساخت آرایه بازهای از اعداد با گامی دلخواه (در کد زیر بازه 1 تا 20 را ساختهایم):
np.arange(1, 21, 3)
خروجی کد بالا:
array([ 1, 4, 7, 10, 13, 16, 19])
تقسیم یک بازه به تعداد عدد دلخواه (در کد زیر بازه 1 تا 20 را به 10 قسمت تقسیم کردهایم، خود 20 نیز جزئی از بازه است):
np.linspace(1, 20, 10)
خروجی کد بالا:
array([ 1. , 3.11111111, 5.22222222, 7.33333333, 9.44444444,
11.55555556, 13.66666667, 15.77777778, 17.88888889, 20. ])
ساخت آرایه دو بعدی همانی:
np.eye(4)
خروجی کد بالا:
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
ساخت آرایه تصادفی
ساخت آرایه یک بعدی شامل 5 عدد تصادفی با توزیع یکنواحت بین 0 و 1:
np.random.random(5)
خروجی کد بالا:
array([0.07629632, 0.84164014, 0.57395594, 0.06807534, 0.59945148])
ساخت آرایه یک دو بعدی 4 در 3 تصادفی با توزیع یکنواحت بین 0 و 1:
np.random.random((4, 3))
خروجی کد بالا:
array([[0.3989938 , 0.59017574, 0.03074637],
[0.1493849 , 0.22933032, 0.32097922],
[0.73606869, 0.83902951, 0.41536393],
[0.29145146, 0.33905473, 0.43683243]])
ساخت آرایه شامل 10 عدد تصادفی بین 1 تا 6 (حتما باید انتهای بازه یک واحد بیشتر از چیزی که میخواهیم باشد):
np.random.randint(1, 7, 10)
نکته: دو عدد اول ابتدا و انتهای بازه را مشخص میکنند و عدد آخر تعداد اعداد را.
خروجی کد بالا:
array([2, 5, 5, 6, 2, 5, 3, 6, 4, 5])
ساخت آرایه دو بعدی 5 در 2 با اعداد تصادقی بین 1 تا 6 (حتما باید انتهای بازه یک واحد بیشتر از چیزی که میخواهیم باشد):
np.random.randint(1, 7, (5, 2))
خروجی کد بالا:
array([[1, 5],
[6, 5],
[6, 3],
[5, 4],
[5, 3]])
ساخت آرایه تصادفی با توزیع نرمال با میانگین 0 و واریانس1 (مشخص کردن ابعد مشابه مثالهای قبل است) در مثال زیر یک آرایه دو بعدی با 4 سطر و 7 ستون با اعضای تصادفی با توزیع نرمال با میانگین 0 و واریانس 1 ساختهایم:
np.random.normal(0, 1, (4, 7))
نکته: عدد اول بیانگر میانگین؛ عدد دوم بیانگر واریانس و مولفه آخر بیانگر ابعاد است. (اگر میخواهیم آرایه تک بعدی بسازیم نیازی به پرانتز نیست)
خروجی کد بالا:
array([[-1.59295907e-01, -8.14512420e-01, 1.19175335e+00,
1.80833105e-01, -1.63477031e-02, 8.93636874e-01,
-8.75278844e-01],
[-3.99917180e-01, -4.55983946e-01, 3.48341589e-01,
1.21215273e+00, 1.18770018e+00, 5.30702370e-01,
-8.45103453e-01],
[-1.80729689e-03, 6.91076408e-03, 3.78491652e-01,
-2.49402495e-02, 5.32058344e-01, 5.45185510e-02,
-1.31112643e-01],
[ 5.75809385e-01, 1.94589562e+00, -1.62805122e-01,
-1.67256052e+00, 1.06601398e+00, 8.74870931e-02,
-1.61900624e+00]])
مشخصهها
هر آرایه مشحصههایی دارد که دانستن آنها میتواند مفید باشد. با استفاده از مشخصههای ndim و shape و size به ترتیب میتوانیم تعداد بُعد آرایه، اندازه بعدها و تعداد اعضای آرایه را داشته باشیم. همچنین با استفاده از مشخصه dtype میتواینم نوع داده آرایه را ببینیم.
a = np.array([[1, 2],
[3, 4],
[5, 6]], dtype='float64')
print(a)
print("The number of dimensions:", a.ndim)
print("Shape:", a.shape)
print("Size:", a.size)
print("dtype:", a.dtype)
خروجی کد بالا:
[[1. 2.]
[3. 4.]
[5. 6.]]
The number of dimensions: 2
Shape: (3, 2)
Size: 6
dtype: float64