قبل از اینکه هر چیزی رو یاد بگیریم، لازمه به 2 سوال جواب بدیم (البته به خودمون!) :
توی این نوشته اول سعی میکنم به سوال شماره 1 جواب بدم و بعد یک الفبای مقدماتی از ورود به دنیای NumPy رو مینویسم.
وقتی میخواین قدم به دنیای علم داده بذارین، تا چشم کار می کنه ریاضیه... زبان پایتون علی رغم تموم قدرت و گستردگی که داره برای محاسبات عددی طراحی نشده و در این زمینه کند عمل میکنه!
پس راه حل چیه؟
اینجاست که کتابخانههای پایتون برای کمک به شما می شتابند ! فقط کافیه با آگاهی از نیازتون و عملکرد هر کتابخانه، بهترین گزینه رو انتخاب کنین.
کتابخانه NumPy یکی از قدرتمندترین کتابخانههای زبان پایتون به شمار میره که برای محاسبات آرایهای، انتخاب بینظیریه.
چرا این حرف رو میزنم؟ دلایل زیر رو بخونین :)
امیدوارم تا اینجا قانع شده باشین که NumPy چیز خوبیه :))
خب همونطور که میدونین توی پایتون وقتی میخوایم از یه کتابخانه استفاده کنیم، باید فراخوانیش کنیم و این کار رو با ایمپورت کردن انجام میدیم.
نکته: تعدادی از کتابخانهها در پایتون به صورت دیفالت نصب نیستن و باید از دستور pip پکیج مورد نظرتون رو نصب کنید. ولی من یه توصیه بهتر دارم ( البته توصیه من نیست :)) توصیهی اهل علم دادهاس! ) و اون هم اینه که به جای پایتون از آناکوندا ( دانلود آناکوندا ) استفاده کنین. و اون به صورت دیفالت تمام پکیجهای مربوط به علم داده رو با خودش نصب میکنه و فقط کافیه چیزی رو که میخواین import کنین.
> پس برای شروع مینویسیم:
import numpy as np
بین کسایی که کارای مربوط به داده کاوی انجام میدن رایجه که numpy رو تحت عنوان np فراخوانی میکنن تا دستورات بعدی رو به صورت خلاصه بنویسن.
توی NumPy به جای لیست از آرایه استفاده میکنیم.
> ساخت آرایه در NumPy:
np.array(Example list)
برای ساخت یک آرایهی NumPy کافیست یک لیست پایتونی به آن بدهیم.
شاید براتون این سوال پیش بیاد که این خروجی چه فرقی با لیست پایتونی داره ! و باید بهتون بگم:
با دقتتر نگاه کنید :)
بین هر آیتم ویرگول قرار نگرفته و از اون مهمتر،
> بررسی نوع آرایه:
type(Example array)
که در نهایت میبینین که یه آرایهی NumPy دارین.
نکته: اگر یک لیست عادی بدهیم، یک آرایه یک بعدی یا اصطلاحا یک ماتریس با یک سطر ساخته می شود. اما اگر بخواهیم یک آرایه چند بعدی بسازیم، کافی است لیستی از لیست ها بسازیم.
یادآوری ریاضیات:
آرایه یک بعدی (1xn) = بردار (Vector)
آرایه دو بعدی (mxn) = ماتریس (Matrix)
آرایه سه بعدی (mxnxp) = تنسور (Tensor)
> ساخت ماتریس صفر:
np.zeros((row,column))
که این دستور با هر تعداد سطر و ستونی که بخواین براتون ماتریس صفر میسازه.
> ساخت ماتریس یک:
np.ones((row,column))
که با این دستور با هر تعداد سطر و ستونی که بخواین براتون ماتریس با آیتم یک میسازه.
> ساخت ماتریس یکه:
np.eye(number of rows and columns)
همانطور که میدانید ماتریس یکه یک ماتریس مربعی با قطر اصلی یک است.
> ساخت ماتریس با عدد دلخواه:
np.full((row,column), the number)
که با اینکار یک ماتریس nxm با عدد ثابت ساختیم.
نکته: می توانیم به جای اینکار، ماتریس یک را در عدد ثابت مورد نظر ضرب کنیم. تنها تفاوت این است که این بار به جای Integer، خروجی Float است.
> ساخت ماتریس در یک بازه مورد نظر:
np.arange(The first number, The last number, Common difference)
که خروجی ماتریسی با 1 سطر و n ستون است. اعداد ماتریس تصاعد عددی با قدرنسبت داده شده هستند. اگر قدر نشبت ندهیم آن را به صورت دیفالت 1 در نظر میگیرد. و اگر به جای عدد اول و آخر، فقط یک عدد بدهیم از صفر تا عدد داده شده نوشته می شود.
> پیدا کردن تعداد سطر و ستون ماتریس:
example_array.shape
که در این حالت Rank ماتریس (یعنی تعداد بعدهای آن) و همینطور Shape ماتریس (یعنی سایز آن در هر بعد) به شما داده میشود.
> پیدا کردن تعداد سطرهای ماتریس:
len(example_array)
> پیدا کردن مجموع آیتمهای یک آرایه عددی:
example_array.sum()
> پیدا کردن بیشترین و کمترین آیتم یک آرایه عددی:
example_array.max() example_array.min()
> محاسبه میانگین آیتمهای یک آرایه عددی:
example_array.mean()
البته توجه کنید تمام این موارد به دو شکل زیر قابل نوشتن است.
> محاسبه انحراف استاندارد:
example_array.std()
یادآوری ریاضیات:
تعریف انحراف استاندارد: جذر واریانس
تعریف واریانس: مجموع مربعات انحرافها تقسیم بر یکی کمتر از تعداد
تعریف انحراف: اختلاف هر داده از میانگین
> پیدا کردن بیشترین index:
example_array.argmax()
> ترکیب کردن دو ماتریس:
list(zip(array_ex1,array_ex2)
> ترکیب دو ماتریس به صورت ردیفی:
np.vstack( [array_ex1 , array_ex2) ]
> ترکیب دو ماتریس یه صورت ستونی:
np.hstack( [array_ex1 , array_ex2) ]
> گرفتن قطر اصلی ماتریس:
np.array(example_array)
> تکرار ماتریس به صورت سطری:
np.array([example_matrix] * number)
> تکرار آرایه به صورت سطری:
np.repeat([example_matrix] , number)
> تولید ماتریس شامل یک تصاعد حسابی:
np.linspace(first_number, last_number, number)
تفاوت این دستور با دستور arrange در است که در دستور arrange عدد آخر قدرنسبت است، ولی در دستور linspace تعداد مورد نظر را می دهیم و یک بازه به تعدادی که میخواهیم تقسیم می شود.
تعداد زیادی دستور تو این کتابخانه وجود داره. اما برای اینکه هم حوصله شما سر نره و هم محتوا بیشتر از این طولانی نشه، من این نوشته رو همینجا تموم می کنم. این دستورات رو به خوبی تمرین کنین و بهتون قول میدم که برای شروع کافی خواهند بود.
بعد از یاد گرفتن این کدها، می تونید به وبسایت رسمی Numpy مراجعه کنین و از بخش Documentation دستورات بیشتری رو آموزش ببینین.