NumPy یکی از کتابخانههای قدرتمند و پرکاربرد در زبان برنامهنویسی پایتون است که بهطور ویژه برای انجام محاسبات علمی و کار با دادههای عددی طراحی شده است. این کتابخانه با ارائه ساختار دادهای به نام آرایه (Array)، امکان انجام عملیات پیچیده ریاضی و آماری را با سرعت و کارایی بالا فراهم میکند. آرایههای NumPy نه تنها از نظر عملکرد بهینهتر از لیستهای معمولی پایتون هستند، بلکه امکانات گستردهای برای دستکاری و پردازش دادهها ارائه میدهند.
دستکاری آرایهها در NumPy یکی از مهارتهای اساسی برای هر کسی است که با دادهها و محاسبات علمی سروکار دارد. از ایجاد و تغییر شکل آرایهها تا انجام عملیات ریاضی و منطقی، NumPy ابزارهای متنوعی را در اختیار شما قرار میدهد. در این مقاله، به بررسی روشهای مختلف دستکاری آرایهها در NumPy میپردازیم و با مثالهای عملی، نحوه استفاده از این ابزارها را نشان خواهیم داد.
هدف این مقاله این است که شما را با مفاهیم پایه و پیشرفته دستکاری آرایهها در NumPy آشنا کند و به شما کمک کند تا از این ابزارها بهطور مؤثر در پروژههای خود استفاده کنید. در ادامه، به بررسی روشهای ایجاد آرایهها، تغییر شکل آنها، ادغام و تقسیم آرایهها، و انجام عملیات ریاضی و منطقی خواهیم پرداخت.
آشنایی با آرایهها در NumPy
آرایهها در NumPy ساختار دادهای هستند که برای ذخیره و پردازش مجموعهای از عناصر همنوع استفاده میشوند. این عناصر میتوانند اعداد صحیح، اعشاری، یا حتی دادههای پیچیدهتر باشند. آرایههای NumPy برخلاف لیستهای معمولی پایتون، از نظر عملکرد و کارایی بسیار بهینهتر هستند و به شما امکان انجام عملیات برداری (Vectorized Operations) را میدهند. این ویژگی باعث میشود که محاسبات روی آرایهها با سرعت بسیار بیشتری نسبت به لیستها انجام شود.
تفاوت آرایههای NumPy با لیستهای پایتون
- همنوع بودن عناصر: در آرایههای NumPy، تمام عناصر باید از یک نوع داده باشند (مثلاً همه اعداد صحیح یا همه اعداد اعشاری). این در حالی است که در لیستهای پایتون، عناصر میتوانند از انواع مختلف باشند.
- عملکرد بهینه: آرایههای NumPy برای انجام عملیات ریاضی و منطقی بهینهسازی شدهاند و از کتابخانههای سطح پایین مانند C استفاده میکنند. این باعث میشود که عملیات روی آرایهها بسیار سریعتر از لیستها انجام شود.
- ابعاد و شکل: آرایههای NumPy میتوانند چندبعدی باشند، در حالی که لیستهای پایتون بهطور پیشفرض یکبعدی هستند. این ویژگی به شما امکان کار با ماتریسها و تنسورها را میدهد.
ویژگیهای اصلی آرایهها
- ابعاد (Dimensions): آرایهها میتوانند یکبعدی، دوبعدی، یا چندبعدی باشند. به عنوان مثال، یک آرایه یکبعدی میتواند یک بردار باشد، در حالی که یک آرایه دوبعدی میتواند یک ماتریس باشد.
- شکل (Shape): شکل یک آرایه به شما میگوید که آرایه در هر بعد چند عنصر دارد. به عنوان مثال، یک آرایه دوبعدی با شکل (3, 4) دارای ۳ سطر و ۴ ستون است.
- نوع داده (dtype): نوع داده عناصر آرایه را مشخص میکند. به عنوان مثال،
int32
برای اعداد صحیح ۳۲ بیتی وfloat64
برای اعداد اعشاری ۶۴ بیتی استفاده میشود. - اندازه (Size): تعداد کل عناصر موجود در آرایه را نشان میدهد. به عنوان مثال، یک آرایه با شکل (3, 4) دارای اندازه ۱۲ است.
در بخش بعدی، به روشهای ایجاد و مقداردهی اولیه آرایهها در NumPy خواهیم پرداخت.
ایجاد و مقداردهی اولیه آرایهها در NumPy
یکی از اولین قدمها در کار با NumPy، ایجاد آرایهها است. NumPy روشهای مختلفی برای ایجاد آرایهها ارائه میدهد که بسته به نیاز شما میتوانید از آنها استفاده کنید. در این بخش، به بررسی برخی از متداولترین روشهای ایجاد و مقداردهی اولیه آرایهها میپردازیم.
۱. ایجاد آرایه از لیستهای پایتون
سادهترین روش برای ایجاد یک آرایه در NumPy، استفاده از تابع np.array()
است. این تابع یک لیست پایتون را به عنوان ورودی میگیرد و آن را به یک آرایه NumPy تبدیل میکند.
خروجی:
[1 2 3 4 5]
همچنین میتوانید آرایههای چندبعدی را از لیستهای تو در تو ایجاد کنید:
خروجی:
[[1 2 3]
[4 5 6]]
۲. ایجاد آرایههای پر از صفر یا یک
گاهی اوقات نیاز دارید آرایههایی ایجاد کنید که تمام عناصر آنها صفر یا یک باشند. NumPy توابعی مانند np.zeros()
و np.ones()
را برای این منظور ارائه میدهد.
خروجی:
[0. 0. 0. 0. 0.]
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
۳. ایجاد آرایهها با استفاده از np.arange()
تابع np.arange()
شبیه به تابع range()
در پایتون است، اما به جای لیست، یک آرایه NumPy برمیگرداند. این تابع برای ایجاد آرایههایی با اعداد متوالی مفید است.
خروجی:
[0 1 2 3 4 5 6 7 8 9]
[ 5 7 9 11 13]
۴. ایجاد آرایهها با استفاده از np.linspace()
تابع np.linspace()
برای ایجاد آرایههایی با اعداد متوالی و فاصلههای مساوی بین آنها استفاده میشود. این تابع تعداد عناصر آرایه را به عنوان ورودی میگیرد.
خروجی:
[0. 0.25 0.5 0.75 1. ]
۵. ایجاد آرایههای تصادفی
NumPy همچنین امکان ایجاد آرایههای تصادفی را فراهم میکند. برای این کار میتوانید از توابع موجود در زیرماژول np.random
استفاده کنید.
خروجی (ممکن است متفاوت باشد):
[[0.123 0.456 0.789]
[0.234 0.567 0.890]
[0.345 0.678 0.901]]
[[3 7 2]
[5 8 4]
[6 1 9]]
در بخش بعدی، به بررسی روشهای تغییر شکل آرایهها در NumPy خواهیم پرداخت.
دستکاری شکل آرایهها در NumPy
یکی از قابلیتهای قدرتمند NumPy، امکان تغییر شکل آرایهها بدون تغییر در دادههای آنها است. این ویژگی به شما اجازه میدهد تا آرایهها را به شکلهای مختلفی درآورید و آنها را برای عملیات خاصی آماده کنید. در این بخش، به بررسی روشهای مختلف تغییر شکل آرایهها میپردازیم.
۱. تغییر شکل آرایهها با reshape()
تابع reshape()
به شما امکان میدهد تا شکل یک آرایه را بدون تغییر در دادههای آن تغییر دهید. تنها شرط این است که تعداد عناصر آرایه قبل و بعد از تغییر شکل یکسان باشد.
خروجی:
آرایه اصلی:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
آرایه تغییر شکل داده شده:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
۲. تغییر اندازه آرایهها با resize()
تابع resize()
شبیه به reshape()
است، اما اگر تعداد عناصر آرایه جدید بیشتر از آرایه اصلی باشد، عناصر اضافی با مقادیر تکراری پر میشوند. اگر تعداد عناصر کمتر باشد، بخشی از دادهها حذف میشوند.
خروجی:
آرایه تغییر اندازه داده شده:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[ 0 1 2 3]]
۳. تبدیل آرایه به یکبعدی با flatten()
و ravel()
هر دو تابع flatten()
و ravel()
آرایههای چندبعدی را به آرایههای یکبعدی تبدیل میکنند. تفاوت اصلی بین این دو تابع این است که flatten()
یک کپی از آرایه اصلی برمیگرداند، در حالی که ravel()
یک نمای (view) از آرایه اصلی برمیگرداند.
خروجی:
آرایه تبدیل شده با flatten:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
آرایه تبدیل شده با ravel:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
۴. جابهجایی ابعاد با transpose()
و swapaxes()
تابع transpose()
ابعاد آرایه را جابهجا میکند. برای آرایههای دوبعدی، این تابع معادل تبدیل ماتریس است.
خروجی:
آرایه جابهجا شده:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
تابع swapaxes()
نیز برای جابهجایی دو محور خاص در آرایه استفاده میشود.
خروجی:
آرایه با محورهای جابهجا شده:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
۵. افزایش ابعاد با np.expand_dims()
و np.newaxis
گاهی اوقات نیاز دارید ابعاد آرایه را افزایش دهید. برای این کار میتوانید از np.expand_dims()
یا np.newaxis
استفاده کنید.
خروجی:
آرایه با ابعاد افزایش یافته:
[[ 0 1 2 3 4 5 6 7 8 9 10 11]]
آرایه با np.newaxis:
[[ 0 1 2 3 4 5 6 7 8 9 10 11]]
۶. حذف ابعاد با np.squeeze()
تابع np.squeeze()
ابعادی که اندازه آنها ۱ است را از آرایه حذف میکند.
خروجی:
آرایه پس از حذف ابعاد:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
در بخش بعدی، به بررسی روشهای ادغام و تقسیم آرایهها در NumPy خواهیم پرداخت.
ادغام و تقسیم آرایهها در NumPy
در بسیاری از موارد، ممکن است نیاز داشته باشید چند آرایه را به هم متصل کنید یا یک آرایه را به چند بخش تقسیم کنید. NumPy ابزارهای قدرتمندی برای انجام این عملیات ارائه میدهد. در این بخش، به بررسی روشهای مختلف ادغام و تقسیم آرایهها میپردازیم.
۱. ادغام آرایهها
ادغام آرایهها به معنای ترکیب دو یا چند آرایه در یک آرایه جدید است. NumPy توابع مختلفی برای ادغام آرایهها در جهتهای مختلف ارائه میدهد.
الف. ادغام افقی و عمودی با np.concatenate()
تابع np.concatenate()
برای ادغام آرایهها در امتداد یک محور خاص استفاده میشود.
خروجی:
ادغام افقی:
[1 2 3 4 5 6]
ادغام عمودی:
[[1 2 5 6]
[3 4 7 8]]
ب. ادغام عمودی با np.vstack()
تابع np.vstack()
برای ادغام آرایهها در جهت عمودی (روی هم) استفاده میشود.
خروجی:
ادغام عمودی با vstack:
[[1 2]
[3 4]
[5 6]
[7 8]]
ج. ادغام افقی با np.hstack()
تابع np.hstack()
برای ادغام آرایهها در جهت افقی (کنار هم) استفاده میشود.
خروجی:
ادغام افقی با hstack:
[[1 2 5 6]
[3 4 7 8]]
د. ادغام در عمق با np.dstack()
تابع np.dstack()
برای ادغام آرایهها در جهت عمق (در امتداد محور سوم) استفاده میشود.
خروجی:
ادغام در عمق با dstack:
[[[1 5]
[2 6]]
[[3 7]
[4 8]]]
۲. تقسیم آرایهها
تقسیم آرایهها به معنای شکستن یک آرایه به چند بخش کوچکتر است. NumPy توابع مختلفی برای تقسیم آرایهها ارائه میدهد.
الف. تقسیم آرایهها با np.split()
تابع np.split()
یک آرایه را به چند بخش مساوی تقسیم میکند.
خروجی:
تقسیم آرایه به ۲ بخش:
[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])]
ب. تقسیم عمودی با np.vsplit()
تابع np.vsplit()
یک آرایه دوبعدی را به چند بخش عمودی تقسیم میکند.
خروجی:
تقسیم عمودی:
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
ج. تقسیم افقی با np.hsplit()
تابع np.hsplit()
یک آرایه دوبعدی را به چند بخش افقی تقسیم میکند.
خروجی:
تقسیم افقی:
[array([[1],
[4],
[7]]), array([[2],
[5],
[8]]), array([[3],
[6],
[9]])]
۳. تکرار آرایهها با np.repeat()
و np.tile()
گاهی اوقات نیاز دارید عناصر یک آرایه را تکرار کنید یا کل آرایه را چندین بار تکرار کنید. NumPy توابع np.repeat()
و np.tile()
را برای این منظور ارائه میدهد.
الف. تکرار عناصر با np.repeat()
تابع np.repeat()
هر عنصر آرایه را به تعداد مشخصی تکرار میکند.
خروجی:
تکرار عناصر:
[0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9]
ب. تکرار کل آرایه با np.tile()
تابع np.tile()
کل آرایه را به تعداد مشخصی تکرار میکند.
خروجی:
تکرار کل آرایه:
[0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9]
در بخش بعدی، به بررسی عملیات ریاضی و منطقی روی آرایهها در NumPy خواهیم پرداخت.
جمعبندی
در این مقاله، به بررسی روشهای مختلف دستکاری آرایهها در NumPy پرداختیم. از ایجاد و مقداردهی اولیه آرایهها تا تغییر شکل، ادغام، تقسیم و انجام عملیات ریاضی و منطقی، NumPy ابزارهای قدرتمندی را در اختیار شما قرار میدهد تا بتوانید بهطور مؤثر با دادههای عددی کار کنید.
- ایجاد و مقداردهی اولیه آرایهها: با استفاده از توابعی مانند
np.array()
,np.zeros()
,np.ones()
,np.arange()
وnp.linspace()
میتوانید آرایههای مختلفی ایجاد کنید. - تغییر شکل آرایهها: توابعی مانند
reshape()
,resize()
,flatten()
,ravel()
,transpose()
وswapaxes()
به شما امکان میدهند شکل آرایهها را بهراحتی تغییر دهید. - ادغام و تقسیم آرایهها: با استفاده از توابعی مانند
np.concatenate()
,np.vstack()
,np.hstack()
,np.split()
,np.vsplit()
وnp.hsplit()
میتوانید آرایهها را به هم متصل یا به بخشهای کوچکتر تقسیم کنید. - عملیات ریاضی و منطقی: NumPy توابعی مانند
np.sum()
,np.mean()
,np.min()
,np.max()
,np.std()
وnp.logical_and()
را برای انجام عملیات ریاضی و منطقی روی آرایهها ارائه میدهد.
این ابزارها به شما کمک میکنند تا دادههای خود را بهطور مؤثر پردازش و تحلیل کنید. NumPy نه تنها برای کارهای ساده، بلکه برای انجام محاسبات پیچیده و بزرگمقیاس نیز بسیار مناسب است.
با تسلط بر این روشها، میتوانید از NumPy بهعنوان یک ابزار قدرتمند در پروژههای علمی، دادهکاوی و یادگیری ماشین استفاده کنید. برای یادگیری بیشتر، میتوانید به مستندات رسمی NumPy مراجعه کنید یا در پروژههای عملی از این ابزارها استفاده کنید.
دیدگاهها