آموزش کامل کار با ماژول Numpy – بخش اول
مقدمه
ماژول های Numpy و SciPy ماژول های متن بازی هستند که میتوان آن ها را به پایتون اضافه کرد و محاسبات عددی و ماتریسی را به صورت بهینه و سریع به کمک آن ها انجام داد. Numpy مخفف عبارت Numeric Python می باشد و اگر بخواهیم تحت اللفظی آن را ترجمه کنیم به معنای “پایتون عددی” می باشد و کاری که این ماژول انجام میدهد انجام محاسبات مربوط به آرایه های بزرگ و ماتریس هاست.
Scipy نیز مخفف عبارت Scientific Python می باشد و در آن توابع Numpy کمی گسترده شده اند و کارهایی مانند تبدیل فوریه و رگرسیون و … را برای ما انجام می دهد.
در این جلسه و چند جلسه آینده قصد داریم به صورت دقیق ماژول Numpy را بررسی کنیم.
روش های import کردن numpy
چندین راه برای import کردن ماژول Numpy وجود دارد. راه استاندارد به صورت ساده با کمک دستور import می باشد:
>>> import numpy
مشکلی که در این روش وجود دارد این است که برای استفاده های زیاد از توابع ماژول numpy هر بار باید عبارت numpy.X را بنویسیم که این کار را کمی مشکل می کند. به همین دلیل اغلب از عبارت as استفاده میکنیم و به جای numpy از np استفاده میکنیم:
>>> import numpy as np
شیوه بالا شیوه ای است که معمولا در کدنویسی ها از آن استفاده میکنیم.
روش دیگر import کردن این است که numpy را در فضای نامی کنونی به صورت مستقیم وارد کنیم. در این حالت دیگر نیاز نداریم تا از عبارتی مثل np. و … استفاده کنیم و به صورت مستقیم میتوانیم اسم تابع را بنویسیم و از آن استفاده کنیم.
>>> from numpy import *
البته این شیوه را برنامه نویسان پایتون نمی پسندند. علت این موضوع هم این است که با این کار یک سری ویژگی های ماژول که در اختیار ما به روش های قبلی قرار میگرفت دیگر در این روش در اختیار ما نیست. در ادامه ما از روش دوم استفاده میکنیم.
آرایه ها در پایتون
هسته اصلی Numpy و نوع داده ای که ما بیشترین کار را با آن داریم آرایه ها هستند. آرایه ها مشابه با لیست ها هستند. با این تفاوت که نوع داده های یک آرایه باید همه یکی باشد. نوع داده ی معمول در Numpy داده های int و float می باشند. در حالی که در یک لیست میتواند یک المان int باشد و المان دیگر string باشد. خوبی آرایه ها نسبت به لیست ها این است که آرایه ها عملیات های ریاضی را سریعتر و بهینه تر انجام می دهند.
یک آرایه را میتوان به کمک یک لیست ساخت. به مثال زیر توجه کنید:
>>> a = np.array([1, 4, 5, 8], float) >>> a array([ 1., 4., 5., 8.]) >>> type(a) <type 'numpy.ndarray'>
در عبارت بالا از متد array برای تبدیل یک لیست به یک آرایه استفاده کرده ایم. متد array دو آرگومان را می پذیرد. آرگومان اول لیستی است که میخواهیم آن را به آرایه تبدیل کنیم و آرگومان دوم هم نوع المان هایی که میخواهیم لیست ما به آن تبدیل شود.
آرایه ها را دقیقا میتوان مشابه با لیست ها تکه تکه و دستکاری کرد. در زیر نمونه هایی از این موضوع آورده شده است :
>>> a[:2] array([ 1., 4.]) >>> a[3] 8.0 >>> a[0] = 5. >>> a array([ 5., 4., 5., 8.])
آرایه ها میتوانند چند بعدی هم باشند. برای ساخت یک آرایه چند بعدی کافی است تا بین براکت ها یک کاما بگذاریم. درک این موضوع با یک مثال ساده تر است :
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> a array([[ 1., 2., 3.], [ 4., 5., 6.]]) >>> a[0,0] 1.0 >>> a[0,1] 2.0
آرایه های دو بعدی را میتوان خیلی ساده مشابه با آرایه های یک بعدی تکه تکه کرد و با آنها کار کرد. استفاده از علامت : به معنای این است که هر چیزی که در آن بعد( dimension ) باشد. مثال های زیر را ببینید:
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> a[1,:] array([ 4., 5., 6.]) >>> a[:,2] array([ 3., 6.]) >>> a[-1:,-2:] array([[ 5., 6.]])
در قسمت اول مثال بالا ما ابتدا به کمک عدد ۱ انتخاب کرده ایم که با المان دوم کار داریم (شمارش از صفر شروع می شود) و با المان دوم که : می باشد گفته ایم که هر چیزی که در المان دوم باشد را میخواهیم. نتیجه نیز این است که تمامی اعضای المان دوم را نشان می دهد.
توجه داشته باشید که برای دسترسی به المان های یک آرایه میتوانیم از اندیس های منفی نیز استفاده کنیم. مثال چهارم این موضوع را نشان می دهد. در مورد اندیس گذاری منفی میتوانید به جلسه لیست ها در پایتون مراجعه کنید. سعی کنید قبل از آن خودتان این موضوع را تحلیل کنید.
معرفی متدهای کاربردی numpy
متد shape: به کمک متد shape میتوانیم ابعاد یک آرایه را بدست آوریم :
>>> a.shape (2, 3)
همانطور که مشاهده میکنید خروجی این متد یک tuple است که ابعاد آرایه را برای ما مشخص می کند.
همچنین به کمک متد dtype میتوانیم نوع داده های ذخیره شده در آرایه را بفهمیم :
>>> a.dtype dtype('float64')
همانطور که میبینیم نوع داده استفاده شده در اینجا float64 باشد. داده float64 داده ای که numpy از آن استفاده می کند تا دقتی دو برابر اعداد عادی را داشته باشد. (مشابه با نوع داده float که python از آن استفاده می کند.)
متد len : با این متد میتوانیم تعداد المان های یک آرایه را بفهمیم.
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> len(a) 2
کلمه کلیدی in: با استفاده از کلمه کلیدی in میتوانیم چک کنیم که آیا یک المان در یک آرایه وجود دارد یا خیر. مثال زیر را ببینید:
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> 2 in a True >>> 0 in a False
تغییر شکل آرایه ها با reshape : با استفاده از tuple ها میتوانیم شکل آرایه خود را تغییر دهیم. در مثلا زیر ما یک آرایه ۱۰*۱ را داریم و آن را به یک آرایه ۲*۵ تبدیل کرده ایم. این کار به کمک متد reshape اتفاق می افتد.
>>> a = np.array(range(10), float) >>> a array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) >>> a = a.reshape((5, 2)) >>> [[0., 1.], [2., 3.], [4., 5.], [6., 7.], [8., 9.]] >>> a.shape (5, 2)
توجه داشته باشید که تابع reshape یک آرایه جدید ایجاد میکند و آرایه قبلی را دستکاری نمی کند.
متد tolist : به کمک این متد میتوانیم یک آرایه را به یک لیست تبدیل کنیم :
>>> a = np.array([1, 2, 3], float) >>> a.tolist() [1.0, 2.0, 3.0]
تابع fill: به کمک این تابع میتوانیم به تمام اعضای یک آرایه یک مقدار مشخص را نسبت دهیم .
>>> a = array([1, 2, 3], float) >>> a array([ 1., 2., 3.]) >>> a.fill(0) >>> a array([ 0., 0., 0.])
Transpose کردن یک آرایه : به کمک متد transpose میتوان Transpose یک آرایه یک یا دوبعدی را بدست آورد. (منظور از transpose کردن یک آرایه تبدیل ردیف ها به ستون و برعکس می باشد.)
>>> a = np.array(range(6), float).reshape((2, 3)) >>> a array([[ 0., 1., 2.], [ 3., 4., 5.]]) >>> a.transpose() array([[ 0., 3.], [ 1., 4.], [ 2., 5.]])
تبدیل یک آرایه چند بعدی به یک آرایه یک بعدی: گاهی اوقات نیاز داریم تا تمامی اعضای یک آرایه که چند بعدی می باشد را به صورت یک بعدی داشته باشیم. در این صورت میتوانیم از متد flatten استفاده کنیم.
>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> a array([[ 1., 2., 3.], [ 4., 5., 6.]]) >>> a.flatten() array([ 1., 2., 3., 4., 5., 6.])
این جلسه به پایان رسید. البته بحث مربوط به ماژول Numpy همچنان در حداقل ۳ جلسه دیگر ادامه دارد و به صورت دقیق متدهای آن بررسی خواهد شد. مثل همیشه میتوانید ما را در تلگرام و یا اینستاگرام دنبال کنید:
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
ایا میشه با این ماژول پردازش تصویر کرد؟
با سلام.
خیر- این یک کتابخانه پایتون است و برای پردازش تصویر لازم است از opencv استفاده کنید.