alikarimi120
alikarimi120
خواندن ۴ دقیقه·۳ سال پیش

پیش نیازهای یادگیری عمیق (قسمت دوم)

سلام :)

در ادامه مطالب قسمت اول، در این قسمت داده ساختارها رو در پایتون بررسی می کنیم.


داده ساختارها در پایتون :

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

1 - لیست:

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

ابتدا لیست را تعریف می کنیم و سپس از آن استفاده می کنیم. خانه اول در لیست برابر صفر است و خانه n ام در لیست برابر با n-1 است. همچنین می توانیم از اندیس های منفی استفاده کنیم که لیست را از انتها به ابتدا پیمایش می کند.

https://gist.github.com/alikarimi120/355847747bca2f77345a65c1c24e220a

لیست ها در پایتون یک نوع pointer هستند، به طور مثال در کد زیر هنگامی که ys=xs را نوشتیم دو لیست متفاوت ساخته نمی شود و لیست کپی نمی شود و اگه شما xs را تغییر بدید می بینید که مقادیر لیست ys هم تغییر می کند.

https://gist.github.com/alikarimi120/a8ece51c20b4e9844a75791e454d4be8

اگر خواستید یک لیست مشخص بسازید و به معنای واقعی داده کپی بشود می توانید از تابع copy استفاده کنید.

اگر می خواهیم ببینیم دو متغیر یکی هستند از دستور is استفاده می کنیم.

https://gist.github.com/alikarimi120/19f51dcb28274bb8a8263a4e86f7d528

یکی از توابع لیست تابع append است ، هنگامی که می خواهیم یک عضو به لیست اضافه کنیم از تابع append اضافه می کنیم و مقدار ورودی به انتهای لیست اضافه می شود و هنگامی که از تابع pop استفاده می کنیم آخرین عضو از لیست برداشته می شود.

https://gist.github.com/alikarimi120/add557217b4fa1f036f7376612e5526a
https://gist.github.com/alikarimi120/e788f05346158fe860d2c9f089d484c2

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

https://gist.github.com/alikarimi120/07d60de28c2c470eac600462d97fc528

می توانید در لیست های پایتون به بازه ای از یک لیست دسترسی داشته باشید، هنگامی که می خواهید به بازه ای از لیست دسترسی داشته باشید همانند کد زیر اندیس های مدنظرتون رو تعیین می کنید، به طور مثال در کد زیر اندیس های بین 2 تا 4 به ما برگردونه میشن، دقت داشته باشید که خود 4 برنمی گرده!

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

اگر می خواهید فقط چند تا اندیس آخر داشته باشید از اندیس های منفی می توانید استفاده کنید.

https://gist.github.com/alikarimi120/99a5f7b5a1c5a3dc5cebeae4d7578b27

از همین شیوه علاوه بر نمایش متغیرها برای جایگزینی مقادیر اندیس ها هم می تونید استفاده کنید. این کار صرفا برای خوندن نیست! می تونید همزمان مقادیر چند اندیس را تغییر بدهید.

https://gist.github.com/alikarimi120/890d70cb4c76d4f018a55f9c4bcbce51

روی لیست می تونیم حلقه هم تعریف کنیم ، فرض کنید لیست زیر رو داریم ، می توانیم به راحتی با استفاده از دستور for و بدون تعیین اندازه لیست آن را در یک حلقه فراخوانی کنیم.

https://gist.github.com/alikarimi120/93166175634c6a3bae17a45d18b12d3a

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

https://gist.github.com/alikarimi120/28b989fb6f290fb1252d0c161d43a0b4

علاوه بر for می تونید از تابع range هم استفاده کنید.با استفاده از این کار لزوما تمام خانه ها خوانده نمی شود و رنجی از اندیس ها خوانده میشه. می تونید تعیین کنید هر چند اندیس یکبار خوانده شود. به طور مثال در کد زیر هر 2 خانه یک بار خوانده می شود.

https://gist.github.com/alikarimi120/4727708215ac7a39b73036d0334be97c

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

به طور مثال در کد زیر لیست رو به توان 2 می رسونیم و لیست جدید به توان 2 رسونده میشه.

https://gist.github.com/alikarimi120/516518c2c830499f9045990d3dd7ddd0



3 - دیکشنری:

ساختار داده ای هست که اعضای آن یک زوج کلید و مقدار است. در کد زیر یک دیکشنری به اسم D تعریف شده است که اعضا با استفاده از "," جدا شده و زوج ها با استفاده از ":" مشخص شده اند.

https://gist.github.com/alikarimi120/578d4244cbc0c786cc36e19b92cdc145

می تونید از طریق کلید به اعضای یک دیکشنری دسترسی داشته باشید.

https://gist.github.com/alikarimi120/731e1970cf9bc0c2958e9ee60196e050

می تونید بررسی کنید که آیا دیکشنری کلید مدنظر شما را دارد یا ندارد. اگر وجود داشته باشد مقدار True برگردانده می شود و در غیر این صورت مقدار False برگردانده می شود.

برای دیکشنری هم comprehensions داریم . به طور مثال می خواهیم یک دیکشنری بسازیم که کلیدها 1 تا 4 هستند و مقادیر به توان 2 رسیده این اعداد باشند. می توانیم از کد زیر استفاده کنیم:

https://gist.github.com/alikarimi120/fb5549f81657296ae7e747fbd9e7e6d7


3 - زوج مرتب:

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

https://gist.github.com/alikarimi120/bbd743afba1f8f36eb7f9a4490f24611

نکته مهم در زوج مرتب این هست که زوج مرتب ها غیرقابل تغییر هستند! وقتی یک زوج مرتب تعریف می کنید دیگه نمی تونید مقادیر اون رو تغییر بدید.

https://gist.github.com/alikarimi120/37cef9b079154c5f53c90bf1f7611c33

اگه خواستیم زوج مرتبی با یک المان داشته باشیم پرانتز باز و بسته خالی فایده نداره! شبیه کد زیر که int تشخیص داده شده، باید یک کاما قبل از 2 حتما بذارید!

https://gist.github.com/alikarimi120/17db846539e74b2046fb3b9bc73c144d


4 - مجموعه :

مجموعه ها در پایتون دقیقا همان تعریف ریاضی رو دارند، مجموعه ای از اعضا که هیچ ترتیبی هم بینشون وجود نداره، می تونید چک کنید fish یا cat داخل مجموعه وجود داره ولی اندیس خاصی ندارن!

https://gist.github.com/alikarimi120/08a2cc8e2a55ea9b16a854500316c919



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

شبکه عصبییادگیری ماشینطبقه بندیآموزشیادگیری عمیق
شاید از این پست‌ها خوشتان بیاید