ساخت آرایه ها (Creating Arrays)
در این بخش با ساخت آرایه ها در نامپای آشنا می شوی. از ساده ترین آرایه 0 بعدی شروع می کنیم و کم کم به آرایه های چندبعدی و تنظیم تعداد بعدها می رسیم.
ایجاد شیء ndarray با تابع array()
نامپای برای کار با آرایه ها ساخته شده است. نوع اصلی آرایه در نامپای ndarray نام دارد. برای ساخت این نوع، از تابع array() استفاده می کنیم.
در مثال زیر یک آرایه ساده می سازیم و نوع آن را چاپ می کنیم.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr)
print(type(arr))
نکته: تابع type() در پایتون نوع یک متغیر را نشان می دهد. این جا نشان می دهد که arr از نوع numpy.ndarray است.
برای ساخت ndarray می توانیم لیست، تاپل (Tuple) یا هر شیء شبیه لیست را به array() بدهیم. نامپای آن را به آرایه خودش تبدیل می کند.
مثال: ساخت آرایه از تاپل
در این مثال، از یک تاپل برای ساخت آرایه نامپای استفاده می کنیم.
import numpy as np
arr = np.array((1, 2, 3, 4, 5))
print(arr)
ابعاد در آرایه ها (Dimensions in Arrays)
هر بار که آرایه داخل آرایه می گذاری، یک «بعد» جدید ساخته می شود. به این حالت، آرایه تو در تو یا nested array می گویند؛ یعنی عنصری که خودش یک آرایه است.
عدد بعد به ما می گوید چند لایه تو در تو داریم. مثلا اعداد ساده 0 بعدی هستند. یک لیست ساده 1 بعدی است. لیستی از لیست ها 2 بعدی می شود و همین طور ادامه دارد.
آرایه های 0 بعدی (0-D Arrays)
آرایه 0 بعدی یا Scalar در واقع یک مقدار تنها است. هر عدد ساده در یک آرایه، خودش یک 0 بعدی محسوب می شود.
import numpy as np
arr = np.array(42)
print(arr)
آرایه های 1 بعدی (1-D Arrays)
آرایه ای که عناصرش 0 بعدی هستند، آرایه 1 بعدی نام دارد. این همان لیست معمولی عددهاست؛ مثل لیست نمره های یک کلاس.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr)
آرایه های 2 بعدی (2-D Arrays)
آرایه ای که عناصرش آرایه های 1 بعدی هستند، آرایه 2 بعدی است. این ساختار شبیه جدول یا ماتریس است؛ سطر و ستون دارد.
در ریاضی، از این نوع آرایه برای ماتریس یا تنسور مرتبه دوم استفاده می کنند.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
نکته: نامپای یک زیرماژول برای کار با ماتریس دارد که numpy.mat نام دارد؛ در مباحث جبر خطی حرفه ای تر استفاده می شود.
آرایه های 3 بعدی (3-D Arrays)
اگر عناصر یک آرایه، خودشان آرایه های 2 بعدی باشند، آرایه 3 بعدی داریم. این ساختار را می توان مثل چند ماتریس روی هم تصور کرد.
در ریاضی به این حالت، تنسور مرتبه سوم می گویند؛ در کار با تصویر و داده های حجیم زیاد دیده می شود.
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]],
[[1, 2, 3], [4, 5, 6]]])
print(arr)
بررسی تعداد بعد با ndim
هر آرایه نامپای ویژگی ای به نام ndim دارد. این ویژگی یک عدد برمی گرداند که تعداد بعدهای آرایه را نشان می دهد.
در مثال زیر، چهار آرایه با ابعاد مختلف می سازیم و ndim هرکدام را چاپ می کنیم.
import numpy as np
a = np.array(42)
b = np.array([1, 2, 3, 4, 5])
c = np.array([[1, 2, 3], [4, 5, 6]])
d = np.array([[[1, 2, 3], [4, 5, 6]],
[[1, 2, 3], [4, 5, 6]]])
print(a.ndim)
print(b.ndim)
print(c.ndim)
print(d.ndim)
aیک مقدار تنها است؛ بعدش 0 می شود.bیک آرایه معمولی است؛ بعدش 1 است.cشبیه ماتریس است؛ بعدش 2 می شود.dچند ماتریس روی هم است؛ بعدش 3 است.
آرایه های با بعد بالاتر و ndmin
گاهی می خواهی آرایه ای بسازی که حتما چند بعد مشخص داشته باشد. حتی اگر داده خیلی کم باشد. در این حالت می توانی هنگام ساخت آرایه، از پارامتر ndmin استفاده کنی.
پارامتر ndmin حداقل تعداد بعد را تعیین می کند. نامپای لایه های تو در تو را طبق این عدد می سازد.
import numpy as np
arr = np.array([1, 2, 3, 4], ndmin=5)
print(arr)
print("number of dimensions :", arr.ndim)
در این مثال آرایه 5 بعدی ساخته شده است. در عمیق ترین بعد، 4 عدد وجود دارد. هر بعد بالاتر فقط یک عنصر دارد که لایه قبلی را در خود نگه می دارد.
نکته: آرایه های با بعدهای خیلی بالا معمولا در کارهای تخصصی تر استفاده می شوند؛ مثل پردازش تصویر سه بعدی یا مدل های یادگیری ماشین.
قدم بعد از ساخت آرایه ها در نامپای
حالا که ساخت آرایه ها در نامپای را دیدی، وقت کارهای دقیق تر است. می توانی برای مرور پایه ها به صفحه شروع کار نامپای برگردی.
قدم منطقی بعدی، یادگیری اندیس گذاری روی آرایه هاست. برای این کار، صفحه ایندکس گذاری آرایه های نامپای را ببین. همچنین اگر بحث ها خیلی ناگهانی شد، سری هم به مقدمه نامپای بزن.
متن انگلیسی همین بخش در صفحه Creating Arrays در W3Schools موجود است. برای توضیح عمیق تر ابعاد و تنسورها، می توانی مستندات رسمی NumPy Doc را هم ببینی.
جمع بندی سریع
- ساخت آرایه ها در نامپای با تابع
array()انجام می شود. - 0 بعدی، 1 بعدی، 2 بعدی و 3 بعدی فقط لایه های تو در تو هستند.
- ویژگی
ndimتعداد بعدهای یک آرایه نامپای را نشان می دهد. - با پارامتر
ndminمی توانی حداقل تعداد بعد را مشخص کنی. - بعد از ساخت آرایه ها در نامپای، سراغ ایندکس گذاری و برش برو.