آشنایی با کتابخونه Numpy

اینجا میخوایم با یکی از کتابخونه های قدرتمند در زمینه ریاضیات آشنا بشیم.

کتابخونه نامپای Numpy دارای ابزار ها و متود های توانمند در ریاضیات هستش . در زبان های پایتون ، R و حتی در سی پلاس پلاس نیز استفاده میشه. البته ما اینجا فعلا در خصوص نامپای در پایتون حرف میزنیم.

از نامپای حتی در برنامه هایی که به ریاضی مربوط نیست هم میشه استفاده کرد. علتش جنس یا نوع داده هاست.

کاربرد های نامپای و نحوه ی نصب

این کتابخونه قدرتمند در حوزه های مختلفی مثل یادگیری ماشین و تحلیل داده ها مورد استفاده قرار میگیره.

برای نصب نامپای در لینوکس در زیر را در ترمینال و در ویندوز دستور زیر را در صفحه cmd وارد میکنید :

pip install numpy




نوع داده ها یا همون تایپ داده هایی که با استفاده از نامپای تعریف میشن از نوع array یا آرایه ها هستن.

اگر برنامه نویس پایتون باشید حتما در مورد لیست ها شنیدید.

لیست ها در پایتون با براکت یا [ ] مشخص میشن. و آرایه ها با ( [ ] ) array تعریف میشن. حالا چرا از لیست ها اسم بردیم چون از لحاظ ظاهری شبیه به هم هستن با هم قیاس میشن اما خوبی استفاده از آرایه ها در داده های با حجم بالا و کلان داده ها مشخص میشه. مزیت نامپای در متود هایی هستش که در اختیار ما قرار میده.

تفاوت آرایه ها با لیست ها

چند نکته مهم که نباید فراموش کنیم.

در آرایه ها تایپ همه ی عناصر باید یکسان باشه یعنی اگر به یک آرایه هم عدد بدیم و هم یک کلمه ، نامپای به صورت خودکار تایپ تمام داده ها رو string در نظر میگیره و در این صورت عملیات ریاضی روی اون آرایه ناکارآمد میشه. اما در لیست ها میتونیم عنصر هایی با تایپ های مختلف قرار بدیم.

در نامپای طیف گسترده ای از متود و روش های سریع و کارآمد تر برای ایجاد آرایه و دستکاری داده های عددی و عملیات ریاضی ، وجود داره.

در کل آٰرایه های نامپی بسیار سریع تر و فشرده تر از لیست ها هستن. حافظه کمتری مصرف میکنن و استفاده از آنها راحت تر است. سرعت کار را بالا میبره. مکانیسم تعیین انواع داده را فراهم میکنه که در نهایت باعث بهینه تر شدن برنامه میشه.

به مثال زیر نگاه کنید.


ما یک لیست به اسم L و یک آرایه به نام a ساختیم که هر دو دارای مقادیر یکسان 0 تا 5 هستن.



میبینید که در لیست ها متودی که بتونیم مجموع مقادیر رو بدست بیاریم وجود نداره و برای این کار باید یک حلقه بنویسیم که برای هر عنصر داخل لیست بیاد مقدار رو با قبلی جمع کنه. اگر برنامه ی طولانی و بزرگی داشته باشیم این کار کاملا بیهوده ست. در کلان داده ها با این روش برنامه به شدت کند خواهد شد.



تو تصویر بالا میبینید ، a یک آرایه با مقادیر صفر تا 5 هست که با استفاده از نامپای ساخته شده، خود نامپای این قابلیت رو برامون تعریف میکنه که با استفاده از متود sum که در واقع یک function هستش مجموع مقادیر رو پیدا کنیم.

البته باید اضافه کنم که داخل خود پایتون یک متود sum وجود داره که سینتکس اون به صورت sum ( L ) هست که میتونیم لیستمون رو بهش بدیم تا مجموع مقادیر رو به ما برگردونه. اما اینجا بحث در مورد متود هایی هست که اختصاصی برای لیست ها و آرایه هاست. و تابع مجموع فقط یک مثال برای نشون دادن تفاوت بین متود های این دو تاست.

متود های دیگری هم برای میانگین ، ماکزیمم ، مینیمم وجود داره با اسامی min ، max ، mean که همگی فانکشن هستن. در لیست ها برای پیدا کردن هر کدوم از مقادیر بالا باید یک حلقه بنویسیم که همونطور که بالاتر گفتم کلی از زمان و سرعت کار ما کم میکنه.


با استفاده از نامپای ما میتونیم آرایه های چند بعدی تعریف کنیم :


به عکس نگاه کنید ، ما دو آرایه با اسامی array1 و array2 تعریف کردیم که عناصر هر دو باهم یکسان و از 0 تا 99 هستش. آیا این دو آٰرایه باهم برابرند؟ خیر



اگر با دقت به array1 نگاه کنید متوجه تفاوت ابعاد خواهید شد که این آٰرایه دارای ابعاد 10 در 10 است اما array2 آٰرایه یک بعدی است.

این قابلیت به ما کمک میکنه تا داده هامون رو مرتب کنیم و اگر نیاز بود به ماتریس تبدیل کنیم. متود های قدرتمندی برای ماتریس ها در نامپای وجود داره. محاسبه دترمینان ، ماتریس معکوس ، مجموع قطری ماتریس و حتی حل معادلات ماتریس خطی یا اسکالر خطی و .... نمونه هایی از توانایی نامپای در ماتریس هاست.

آرایه هایی که با استفاده از نامپای میسازیم رو میتونیم به حالت های مختلف دستکاری کنیم و تغییر بدیم حتی به چند زیر آرایه تبدیل کنیم یا برعکس چند آرایه رو بهم بچسبونیم.

کلی کار های خفن دیگه میتونیم با نامپای انجام بدیم مثل حل انواع معادلات اعم از مثلثاتی و .... ، رسم نمودار های مختلف مثل هیستوگرام و ...


برای یادگیری این کتابخونه خفن کلی ویدیو و داکیومنت های مختلف وجود داره که اگر از سورس های انگلیسی استفاده میکنید، یکی از تمیز ترین داکیومنت های موجود داکیومنت خود سایت نامپای هست :

Numpy documentation

اگه شما هم منبع خوبی برای یادگیری مشناسید حتما معرفی کنید.

موفق باشید.