انجمن هوش مصنوعی دانشگاه اصفهان
معرفی کتابخانه Numpy در پایتون
در پردازش هایی که بر روی داده ها انجام میشود,مانند پردازش تصاویر یا کلیپ های صوتی یا پردازش های دیگر , معمولا داده ها را به شکل آرایه ای از اعداد در نظر میگیرند.برای مثال عکس های دیجیتال را میتوان یک آرایه دو بعدی در نظر گرفت که هر خانه آرایه یک پیکسل از تصویر را نشان میدهد که مقدار رنگ را در آن خانه نمایش میدهد. این مثال و مثال های دیگر , اهمیت آرایه را نشان می دهند.بنابراین باید به دنبال راهی بگردیم که بتوان به راحتی و با سرعت بالا روی اعداد و آرایه اعداد کار کنیم. پایتون با کتابخانه Numpy خود توانسته کمک بزرگی در این زمینه به ما بکند. در ادامه به توضیحات بیشتر درمورد این کتابخانه و معرفی توابع آن می پردازیم . پس با ما همراه باشید.
چرا از کتابخانه Numpy استفاده کنیم؟
1. این کتابخانه برای ذخیره داده ها از حافظه خیلی کمتری استفاده می کند.
2. این کتابخانه بسیار سریع است. و این همان موضوعی است که آرایه های Numpy را از لیست های پایتونی متمایز میکند. آرایه های این کتابخانه تا 50 برابر سریع تر از لیست های پایتونی هستند.
3. در Numpyبه راحتی میتوانید یک ماتریس n*n بسازید که با آن زیاد سر و کار دارید.
4. در این کتابخانه برای تمام محاسبات ماتریسی , تابع تعریف شده که با استفاده از آنها به راحتی میتوانید محاسباتتان را انجام دهید و اصلا نیازی به نوشتن کد های طولانی نیست.
خب حالا که با مزایای این کتابخانه آشنا شدید (البته این را بگم که مزایای این کتابخانه خیلی بیشتر از این مواردی هست که ذکر شد اما ما فعلا به همین چند مورد بسنده میکنیم) دیگر وقتش رسیده است که به معرفی توابع مهم و کاربردی این کتابخانه بپردازیم. پس ادامه این مقاله را از دست ندهید.
قبل از استفاده از این کتابخانه شما نیاز به نصب آن دارید. میتوانید از این لینک برای نصب این کتابخانه کمک بگیرید : How to install numpy
بعد از نصب Numpy, آن را با کلمه کلیدی import در برنامه های خود وارد کنید. تا بتوانید از آن استفاده کنید.
import numpy
برای سهولت در استفاده و فراخوانی این کتابخانه می توان آن را به صورت زیر import کرد (کلمه کلیدی as باعث می شود بتوانیم از نامی که بعد از آن آمده به جای نام کتابخانه استفاده کنیم)
import numpy an np
معرفی توابع مهم و کاربردی Numpy:
1. array() :
ساخت آرایه مورد نظر. به عنوان ورودی این تابع میتوانید list یا tuple یا هر شیئ آرایه مانند دیگری بفرستید.
arr = np.array([1,2,3,4,5])
print(arr)
2. full() :
پر کردن همه خانه های یک آرایه با عددی مشخص.
full = np.full((4,2),2.3)
print(full)
3. insert() :
درج عنصر در ایندکس مشخص درآرایه. پارامتر های ورودی این آرایه به ترتیب نام آرایه, ایندکس درج و مقدار است.
arr = np.array([1,2,3,4,5,6,7,8,9,10])
inserted = np.insert(arr,2,20)
print(arr)
print(inserted)
❗️توجه کنید که این تابع, یک آرایه تک بعدی برمیگرداند. پس درصورت لزوم باید تابع را reshape کنید که در ادامه با این تابع نیز آشنا خواهید شد.
4. delete() :
حذف عنصر از آرایه. پارامتر های ورودی این تابع نام آرایه و ایندکس حذف.
arr = np.array([1,2,3,4,5,6,7,8,9,10])
deleted= np.delete(arr,2,20)
print(arr)
print(deleted)
❗️توجه کنید که این تابع, یک آرایه تک بعدی برمیگرداند. پس درصورت لزوم باید تابع را reshapeکنید که در ادامه با این تابع نیز آشنا خواهید شد.
5. type() :
مشاهده نوع آبجکت ها.
arr = np.array([1,2,3,4,5,6,7,8,9,10])
print(type(arr))
❗️همانطور که مشاهده میکنید, نوع آرایه ای که ساختیم ndarray است.
آبجکت آرایه در ndarray , numpy نامیده میشود.
6. dtype() :
یک propertyاست برای مشاهده نوع عناصر موجود در یک آرایه.
arrChar = np.array(['a','b','c'])
arrString = np.array(['maryam','danial','arshia'])
arrFloat = np.array([1.2,3.2,1.0])
print(arrChar )
print(arrString )
print(arrFloat)
7. astype('datatype') :
تغییر نوع عناصر یک آرایه. خروجی این تابع یک آرایه جدید است, پس یک متغیر جدا برای آن در نظر بگیرید.
arr = np.array([1.1,2.1,3.1])
newarr = arr.astype('i')
print(arr)
print(arr.dtype)
print(newarr)
print(newarr.dtype)
8. [index] :
دسترسی به عناصر یک آرایه.
arr = np.array([1,2,3,4])
print(arr[0] + arr[2] * arr[3] / arr[1])
❗️ فراموش نکنید که ایندکس اعضا هر آرایه از صفر شروع میشوند.
❗️در صورت استفاده از ایندکس منفی برای دسترسی به اعضا آرایه, پیماش آرایه
از آخر شروع می شود. با مشاهده کد زیر, بیشتر متوجه این موضوع خواهید شد.
arr = np.array([1,2,3,4])
print(arr[-1])
print(arr[3])
9. Slicing() :
دسترسی به اعضا یک آرایه از یک ایندکس مشخص تا ایندکس دیگر.
میتوانید با نوشتن [start : end : step] رو به روی اسم آرایه مورد نظر این کار را انجام دهید
توجه داشته باشید:
درصورت ننوشتن start , صفر در نظر گرفته میشود.
درصورت ننوشتن end , سایز آرایه در نظر گرفته میشود.
درصورت ننوشتن step , یک درنظر گرفته میشود.
arr = np.array([1,2,3,4,5,6,7])
print(arr[1:5:2])
print(arr[0:5])
print(arr[4:])
print(arr[:3])
10. view() :
کپی گرفتن از آرایه. اما در نظر داشته باشید که اگر بعد از آن تغییری در آرایه اصلی ایجاد کنید آن تغییر روی آرایه کپی نیز اعمال میشود.
arr = np.array([1,2,3,4,5,6,7])
x = arr.view
arr[0] = 42
print(arr)
print(x)
11. for in :
پیمایش روی اعضا آرایه.
arr = np.array([1,2,3,4,5,6,7])
for x in arr:
print(x)
12. ndenumerate () :
مشاهده ایندکس هر عضو از آرایه در کنارش, هنگام پیمایش.
arr = np.array([1,2,3,4,5,6,7])
for idx, x in np.ndenumerate(arr):
print(idx,x)
13. concatenate () :
وصل کردن چند آرایه به یکدیگر و تبدیل آن ها به یک آرایه. این تابع یک آرگومان ورودی axis دارد که در قسمت توابع آرایه دو بعدی به توضیح آن خواهیم پرداخت.
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr = np.concatenate((arr1,arr2))
print(arr)
14. arry_split () :
شکستن یک آرایه به چند آرایه دیگر. آرگومان دوم این تابع تعداد (n)آرایه هایی که میخواهید آرایه اصلی به آن تقسیم شود را مشخص میکند.
arr = np.array([1,2,3,4,5,6,7])
newarr = np.array_split(arr,3)
print(newarr)
print(newarr[2])
❗ توجه کنید که خروجی این تابع, آرایه ای شامل n آرایه است.
15. where (element or …) :
انجام عملیات جست و جو در آرایه.
arr = np.array([1,2,3,4,5,4,7])
x = np.where(arr == 4)
print(x)
❗️ همانطور که در کد بالا مشاهده میکنید, از تابع خواسته شده اعداد 4 موجود در آرایه را پیدا کند و تابع نیز ایندکس مکان هایی که 4 وجود داشته است را برگردانده است.
16. searchsorted(array, element, side) :
مشخص کردن جهت شروع عملیات جستجو در آرایه.
arr = np.array([6,7,8,9])
x = np.searchsorted(arr , 7 , side='right')
y = np.searchsorted(arr , 7 , side='left')
print(x)
print(y)
17. sort() :
مرتب سازی آرایه.
num = np.array([3 , 2 , 0 ,1])
string = np.array(['banana','cherry','apple'])
boolean = np.array([True,False,True]
print(np.sort(num))
print(np.sort(string ))
print(np.sort(boolean ))
18. Filtering():
این امر با استفاده از یک آرایه بولین صورت میگیرد. قطعه کد زیر را با دقت مشاهده کنید.
arr = np.array([3 , 2 , 0 ,1])
x = [True,False,True,False]
filteredarr = arr[x]
print(filteredarr)
❗️شما با استفاده از یک آرایه boolean, تمامی عانصر آرایه که ایندکس متناظر آنها در آرایه بولین true است را بدست می آورید. یعنی آرایه خود را فیلتر می کنید.
✔️ در ادامه به تعریف آرایه های چند بعدی با استفاده از این کتابخانه خواهیم پرداخت.
19. آرایه دو بعدی:
twoDarr = np.array([[1,2,3],[4,5,6]])
print(twoDarr)
20. آرایه سه بعدی:
arr = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(arr)
❗️ برای هر آرایه n بعدی دیگر هم به همین صورت عمل می کنیم.
21. reshape() :
بهتر است برای ساخت آرایه سه بعد به بالا, ابتدا یک آرایه تک بعدی بسازید و سپس با این متد, بعد آن را تغییر دهید.
arr = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
newarr1 = arr.reshape(4,3)
newarr2 = arr.reshape(2,3,2)
print(newarr1)
print(newarr2)
22. ndim() :
چک کردن چند بعدی بودن یک آرایه.
a = np.array(42)
b = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
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)
23. shape () :
تعداد عناصر در هر بعد آرایه را نمایش می دهد.
arr = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
print(arr.shape)
24. stack () :
تبدیل آرایه های یک بعدی به یک آرایه چند بعدی.
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr = np.stack((arr1,arr2), axis=1)
newarr = np.stack((arr1,arr2),axis=0)
print(arr)
print(newarr)
❗️ با توجه به مقدار axis: در حالت اول, عناصری که در یک ستون قرار دارند, تشکیل یک آرایه میدهند و همه این ها در یک آرایه دیگر قرار میگیرند. در حالت دوم , آرایه ها در زیر یکدیگر قرار میگیرند و تشکیل آرایه دو بعدی می دهند.
✔ تمامی توابعی که برای آرایه تک بعدی ذکر شدند, برای آرایه های n بعدی نیز به کار
برده میشوند.با این تفاوت که ازn ایندکس برای دسترسی به عناصر آرایه استفاده میشود.
معرفی ماژول random از کتابخانه numpy:
25. ابتدا این ماژول را به برنامه اضافه میکنیم.
from numpy import random
26. rand() :
ایجاد یک عدد رندوم اعشاری بین 0 تا 1.
x = random.rand()
print(x)
27. randint (range, n) :
ایجاد یک آرایه n بعدی با عناصر بین 0 تا range.
x = random.randint(100,size=(3,5))
print(x)
28. choice () :
ایجاد آرایه با مشخص کردن احتمال وجود عناصر مختلف.
x = random.choise([3,5,7,9],p=[0.1,0.3,0.6,0.0],size(3,5))
print(x)
در این مقاله ما سعی کردیم مهم ترین توابعی که شما برای شروع کار با کتابخانه Numpyنیاز دارید را برایتان قرار دهیم و توضیح مختصری در مورد هریک بدهیم.امیدواریم که مورد استفاده شما قرار گرفته باشد.
مریم سادات صفوی
دانیال توکلی
مطلبی دیگر از این انتشارات
جهان از نگاه ماشینها
مطلبی دیگر از این انتشارات
یادگیری عمیق
مطلبی دیگر از این انتشارات
هوشِ بازیها