diff --git a/lectures/about_py.md b/lectures/about_py.md index 5fc729a..613052e 100644 --- a/lectures/about_py.md +++ b/lectures/about_py.md @@ -12,8 +12,8 @@ kernelspec: # درباره ی این دوره ```{epigraph} -" پایتون به قدری پیشرفته و قدرتمند شده است که دیگر نیازی به استفاده از R نداریم. طرفداران R، ببخشید؛ خود من هم زمانی یکی از شما بودم، اما دیگر به سراغ R نمی روم." -_ کریس ویگینس +" پایتون به قدری پیشرفت کرده و به سلاحی قدرتمند تبدیل شده است که دیگر نیازی به استفاده از R نداریم. طرفداران R، ببخشید؛ خود من هم زمانی یکی از شما بودم، اما دیگر به سراغ R نمی روم." +-- کریس ویگینس ``` ## مقدمه @@ -27,29 +27,41 @@ _ کریس ویگینس * برخی از ویژگی های پایتون را نشان خواهیم داد -* در رابطه با ارتباط پایتون و هوش مصنوعی بحث خواهیم کرد - * توضیح می دهیم که چرا پایتون زبان محبوب ما برای محاسبات علمی است * و شما را به ادامه ی مسیر و اهدافتان تشویق می کنیم. همچنین شما نیازی به درک همه ی مواردی که در این درس خواهید دید، ندارید؛ زیرا در ادامه ی دروس تمامی جزئیات را آموزش خواهیم داد. -### آیا نمیتوانم فقط از ChatGPT استفاده کنم؟ +### آیا نمیتوانم فقط از مدل های زبانی بزرگ (LLM) استفاده کنم؟ خیر! -شاید وسوسه انگیز به نظر برسد که در عصر هوش مصنوعی هایی مانند [ChatGPT](https://chatgpt.com/) و LLM و ابزارهایی با بهره وری فوق العاده برای برنامه نویسی، ما همچنان به یادگیری نحوه ی کد نویسی نیاز داشته باشیم. +البته که وسوسه انگیز است که در عصر هوش مصنوعی فکر کنیم دیگر لازم نیست کد نویسی یاد بگیریم. + +و بله، ما هم گاهی اوقات تنبلی را دوست داریم. +علاوه براین، ما موافقیم که هوش مصنوعی ها ابزارهای برجسته ای برای افزایش بهره وری برنامه نویسان هستند. -در واقع شاید یک هوش مصنوعی بتواند همراه خوبی برای یادگیری دروس این دوره باشد؛ هوش مصنوعی مطمئنا می تواند به شما در نوشتن و ترکیب کد ها کمک کند (سعی کنید کد های این مجموعه را کپی کنید و از هوش مصنوعی بخواهید آن را برای شما توضیح دهد)؛ اما هوش مصنوعی نمی تواند سوالات جدیدی را که قبلا ندیده است به طور کامل و قابل اعتماد حل کند. + اما هوش مصنوعی نمی تواند سوالات جدیدی را که قبلا ندیده است به طور کامل و قابل اعتماد حل کند. بنابراین شما نیاز خواهید داشت تا به‌ عنوان یک ناظر بتوانید کد ها رابخوانید، بنویسید و درک کنید. +با این حال، یک مدل زبانی بزرگ (LLM) خوب میتواند هراه مفیدی برای دنبال کردن این درس ها باشد؛ میتوانید بخشی از کدهای این درس را کپی کنید و ازآنها بخواهید برایتان توضیح دهند. + ### آیا Matlab بهتر نیست؟ -نه! نه و هزاران بار نه! امروزه تقریبا برای اکثر مشکلات، کتابخانه های علمی پایتون قابلیت های بسیار پیشرفته تری نسبت به متلب دارند. ما مزایای استفاده از کتابخانه های پایتون را در این مجموعه و سری های بعد توضیح خواهیم داد، همچنین خواهیم گفت که چگونه طراحی زیبای پایتون به شما کمک می کند تا کدی تمیز و کارآمد بنویسید. +نه! نه و هزاران بار نه! + +نیروانا گروه بزرگی بود (و [ساوندگاردن](https://www.youtube.com/watch?v=3mbBbFH9fAg&list=RD3mbBbFH9fAg) حتی بهتر بود) اما وقت آن است که از دهه 90 عبور کنیم. + +امروزه تقریبا برای اکثر مشکلات، کتابخانه های علمی پایتون قابلیت های بسیار پیشرفته تری نسبت به متلب دارند. -علاوه براین ویژگی ها، پایتون توسط یک انجمن بزرگ، کمک کننده و رایگان در حال گسترش کاربران است. +این موضوع به ویژه در حوزه های به سرعت در حال رشد، مانند یادگیری عمیق (Deep Learning) و یادگیری تقویتی(Reinforcement Learning) صادق است. + +علاوه بر این، تمام مدل های زبانی بزرگ (LLM) اصلی در نوشتن کد پایتون مهارت بسیار بیشتری نسبت به کد متلب دارند. + +ما در طول این سری از دروس و همچنین در سرس بعدی در مورد JAX، به بحث در مورد مزایای نسبی کتابخانه های +پایتون خواهیم پرداخت. ## برنامه نویسی پایتون چیست؟ [پایتون](https://www.python.org) یک زبان برنامه نویسی همه منظوره است که در سال 1989 توسط [خیدو فان روسوم](https://en.wikipedia.org/wiki/Guido_van_Rossum) ابداع شد. @@ -62,13 +74,13 @@ _ کریس ویگینس * به جای یک شرکت انتفاعی، توسط جامعه ی کاربران کنترل می شود -* و قابلیت تکثیر و [علم باز](https://en.wikipedia.org/wiki/Open_science) را تشویق می کند. +* و قابلیت بازتولید و [علم باز](https://en.wikipedia.org/wiki/Open_science) را تشویق می کند. ### کاربردهای رایج پایتون پایتون یک زبان همه منظوره است که تقریبا در همه ی حوزه های کاربردی از جمله موارد زیر استفاده می شود: -* هوش مصنوعی +* هوش مصنوعی و علوم کامپیوتر * محاسبات علمی @@ -76,10 +88,12 @@ _ کریس ویگینس * توسعه ی وب -* رابط های کاربری گرافیکی و CGI +* رابط های کاربری گرافیکی (GUI) و پردازش تصویر (CGI) * توسعه ی بازی +* برنامه ریزی منابع سازمانی + * محتوای چندرسانه ای * و غیره. @@ -90,7 +104,6 @@ _ کریس ویگینس * [OpenAI](https://openai.com/) * [Netflix](https://www.netflix.com/) * [Meta](https://opensource.fb.com/) -* [Dropbox](https://www.dropbox.com/) * [Amazon](https://www.amazon.com/) * [Reddit](https://www.reddit.com/) @@ -111,21 +124,17 @@ _ کریس ویگینس پایتون یک [زبان برنامه نویسی سطح بالا](https://en.wikipedia.org/wiki/High-level_programming_language) است، بدین معنی که خواندن، نوشتن و اشکال زدایی آن نسبتا آسان است و یک هسته ی زبانی مختصر دارد که به آسانی قابل یادگیری است. این هسته ی زبانی، توسط بسیاری از کتابخانه ها پشتیبانی می شود که می توانید درصورت نیاز، استفاده از آنها را یادبگیرید. -پایتون بسیار مبتدی پسند است، زیرا؛ برای دانش آموزانی که برنامه نویسی را یادمی گیرند مناسب بوده و در بسیاری از برنامه های کارشناسی و کارشناسی ارشد تدریس می شود. همچنین پایتون دارای ویژگی های دیگری همچون پشتیبانی از چندین سبک برنامه نویسی(روشی، شی گرا،کاربردی و...) است و همچنین به جای [کامپایل](https://en.wikipedia.org/wiki/Compiler) شدن بصورت [مفسری](https://en.wikipedia.org/wiki/Interpreter_(computing)) اجرا می شود. +پایتون انعطاف پذیر و عمل گرا است و از چندین الگوی برنامه نویسی (مثل برنامه نویسی رویه ای، شیء گرا، تابع محور و غیره.) پشتیبانی می کند. ### نحو و طراحی -یکی از دلایل محبوبیت پایتون، طراحی ساده و ظریف آن است که در ادامه نمونه های زیادی از آن خواهیم دید. - -برای بهتر درک کردن این موضوع، اجازه دهید به یک مثال از زبان برنامه نویسی [جاوا](https://en.wikipedia.org/wiki/Java_(programming_language)) و پایتون نگاهی بیاندازیم. +یکی از دلایل محبوبیت پایتون، طراحی ساده و ظریف آن است. -قرار است کد جاوا یک فایل پیش فرض به نام data.csv باز کند و میانگین مقادیر را در ستون دوم محاسبه کند. طبق آنچه در زیر می بینید، حتی بدون دانستن جاوا می توانید متوجه شوید که کد طولانی و پیچیده ای است. - -حال به کد پایتون برای همان دستور را ببینید، حتی اگر هنوز چیزی از پایتون نمی دانید، می توانید ببینید که کد پایتون ساده تر و خواندن آن آسان تر است. به همین علت سادگی پایتون و طراحی منظم آن است که باعث گسترش محبوبیت این زبان برنامه نویسی شده است. +برای بهتر درک کردن این موضوع، اجازه دهید به یک مثال نگاهی بیاندازیم. -**توجه: در ادامه شما نیازی به خواندن و درک کد جاوا ندارید!** +کد زیر به جای پایتون با [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) نوشته شده است. -**کد برنامه نویسی جاوا** +**شما نیازی به خواندن و درک کد جاوا ندارید!** ```{code-block} java @@ -147,11 +156,16 @@ public class CSVReader { String[] values = line.split(splitBy); if (values.length > columnIndex) { try { - double value = Double.parseDouble(values[columnIndex]); + double value = Double.parseDouble( + values[columnIndex] + ); sum += value; count++; } catch (NumberFormatException e) { - System.out.println("Skipping non-numeric value: " + values[columnIndex]); + System.out.println( + "Skipping non-numeric value: " + + values[columnIndex] + ); } } } @@ -161,18 +175,22 @@ public class CSVReader { if (count > 0) { double average = sum / count; - System.out.println("Average of the second column: " + average); + System.out.println( + "Average of the second column: " + average + ); } else { - System.out.println("No valid numeric data found in the second column."); + System.out.println( + "No valid numeric data found in the second column." + ); } } } ``` -**کد برنامه نویسی پایتون** - +قرار است کد جاوا یک فایل پیش فرض به نام data.csv باز کند و میانگین مقادیر را در ستون دوم محاسبه کند. طبق آنچه در زیر می بینید، حتی بدون دانستن جاوا می توانید متوجه شوید که کد طولانی و پیچیده ای است. +حال به کد پایتون برای همان دستور را ببینید، حتی اگر هنوز چیزی از پایتون نمی دانید، می توانید ببینید که کد پایتون ساده تر و خواندن آن آسان تر است. به همین علت سادگی پایتون و طراحی منظم آن است که باعث گسترش محبوبیت این زبان برنامه نویسی شده است. ```{code-cell} python3 :tags: [skip-execution] @@ -180,7 +198,7 @@ public class CSVReader { import csv total, count = 0, 0 -with open("data.csv", mode='r') as file: +with open('data.csv', mode='r') as file: reader = csv.reader(file) for row in reader: try: @@ -188,16 +206,15 @@ with open("data.csv", mode='r') as file: count += 1 except (ValueError, IndexError): pass - print(f"Average: {total / count if count else 'No valid data'}") ``` -### اتصال به هوش مصنوعی +### ارتباط با هوش مصنوعی -قطعا می دانید که هوش مصنوعی به سرعت در حال گسترش و پیشرفت است، مگر اینکه سالها درون غار زندگی کرده و از هرگونه تماس با دنیای مدرن اجتناب کرده باشید! +هوش مصنوعی در حال تحول و جایگزینی بسیاری از وظایفی است که هم اکنون توسط انسان ها انجام می شود، دقیقا همانگونه که دیگر اشکال فناوری و ماشین آلات در طی قرون گذشته این روند را طی کرده اند. -همانطور که پیش تر به آن اشاره شد، امروزه هوش مصنوعی به خوبی می تواند به شما در نوشتن کد کمک کند. بدون شک هوش مصنوعی در آینده بسیاری از وظایفی که در حال حاضر توسط انسان انجام می شود را درست مانند سایر اشکال ماشین آلات در چند قرن گذشته، برعهده خواهد گرفت. پایتون نیز نقش بزرگی را در پیشرفت هوش مصنوعی و یادگیری ماشین ایفا می کند و این بدان معناست که شرکت های فناوری، در حال سرمایه گذاری بر روی توسعه ی کتابخانه های بسیار قدرتمند پایتون هستند. بنابراین حتی اگر قصد ندارید روی هوش مصنوعی و یادگیری ماشین کار کنید، می توانید از یادگیری بهره مند شده و از برخی از این کتابخانه ها برای پروژه های خود در اقتصاد، مالی و همچنین سایر علوم استفاده کنید؛ که این دوره چگونگی این کار را توضیح خواهد داد. + پایتون نیز نقش بزرگی را در پیشرفت هوش مصنوعی و یادگیری ماشین ایفا می کند و این بدان معناست که شرکت های فناوری، در حال سرمایه گذاری بر روی توسعه ی کتابخانه های بسیار قدرتمند پایتون هستند. بنابراین حتی اگر قصد ندارید روی هوش مصنوعی و یادگیری ماشین کار کنید، می توانید از یادگیری بهره مند شده و از برخی از این کتابخانه ها برای پروژه های خود در اقتصاد، مالی و همچنین سایر علوم استفاده کنید؛ که این دوره چگونگی این کار را توضیح خواهد داد. ## برنامه نویسی علمی با پایتون @@ -230,9 +247,10 @@ a حالا بیاید این آرایه را با اعمال توابع تبدیل کنیم: ```{code-cell} python3 -b = np.cos(a) # Apply cosine to each element of a -c = np.sin(a) # Apply sin to each element of a +b = np.cos(a) # Apply cosine to each element of a +c = np.sin(a) # Apply sin to each element of a ``` + و حالا میتوانیم به راحتی حاصل ضرب اسکالر `b` و `c` را بدست بیاوریم: ```{code-cell} python3 @@ -247,7 +265,7 @@ b @ c ### SciPy -کتابخانه [SciPy](http://www.scipy.org) بر روی NumPy ساخته شده است و عملکردهای اضافی را ارائه می دهد. +کتابخانه [SciPy](http://www.scipy.org) بر روی NumPy ساخته شده است و قابلیت های اضافی را ارائه می دهد. برای مثال بیاید حساب کنیم جاییکه @@ -276,8 +294,9 @@ value, error = quad(ϕ.pdf, -2, 2) # Integrate using Gaussian quadrature value ``` -کتابخانه ی SciPy شامل بسیاری از امور استاندارد کاربردی مانند [جبرخطی](http://docs.scipy.org/doc/scipy/reference/linalg.html)، [یکپارچه سازی](http://docs.scipy.org/doc/scipy/reference/integrate.html)، [درون یابی](http://docs.scipy.org/doc/scipy/reference/interpolate.html)، [بهینه سازی](http://docs.scipy.org/doc/scipy/reference/optimize.html)، [توزیع ها و تکنیک های آماری](http://docs.scipy.org/doc/scipy/reference/stats.html) و [پردازش سیگنال](http://docs.scipy.org/doc/scipy/reference/signal.html) است که بعدا در مورد آنها با جزئیات بیشتر صحبت خواهیم کرد. +کتابخانه ی SciPy شامل بسیاری از امور استاندارد کاربردی مانند [جبرخطی](https://docs.scipy.org/doc/scipy/reference/linalg.html)، [انتگرال گیری](https://docs.scipy.org/doc/scipy/reference/integrate.html)، [درون یابی](https://docs.scipy.org/doc/scipy/reference/interpolate.html)، [بهینه سازی](https://docs.scipy.org/doc/scipy/reference/optimize.html)، [توزیع ها و تکنیک های آماری](https://docs.scipy.org/doc/scipy/reference/stats.html) و [پردازش سیگنال](https://docs.scipy.org/doc/scipy/reference/signal.html) است که می توانید همه ی آنها را [اینجا](https://docs.scipy.org/doc/scipy/reference/index.html) ببینید. +بعدا SciPy را با جزئیات بیشتری توضیح خواهیم داد. ### گرافیک نقطه ی قوت اصلی پایتون تجسم داده ها است. محبوب ترین و جامع ترین کتابخانه ی پایتون برای ایجاد شکل ها و نمودارها [Matplotlib](http://matplotlib.org/) است که شامل قابلیت های ایجاد تصاویر نمودارها، هیستوگرام ها، سطوح کانتور، نمودارهای سه بعدی، نمودارهای میله ای و... بوده و می تواند خروجی ها را در قالب های مختلف مانند (PDF، PNG، EPS و...) ارائه دهد و همچنین قابلیت ادغام LaTex را نیز دارد. @@ -313,13 +332,12 @@ value ### شبکه ها و نمودارها مطالعه ی شبکه ها و نمودارها بخش مهمی از کار علمی در اقتصاد، مالی و سایر زمینه ها است؛ به عنوان مثال، ما به مطالعه ی مواردی چون شبکه های تولید، شبکه های بانکی و موسسات مالی، شبکه های اجتماعی و... علاقه مند هستیم. -(اگر تمایل به کسب اطلاعات بیشتر در این مورد دارید، ما [کتابی در زمینه شبکه های اقتصادی](https://networks.quantecon.org/) داریم که میتوانید به آن رجوع کنید.) - پایتون نیز کتابخانه های زیادی برای مطالعه ی شبکه ها و نمودارها دارد. یکی از معروف ترین این کتابخانه ها [NetworkX](http://networkx.github.io/) است که از جمله ویژگی های آن داشتن الگوریتم های استاندارد گراف برای تحلیل شبکه ها و فرآیندهای مربوط به نمایش نمودارها است. +پایتون نیز کتابخانه های زیادی برای مطالعه ی شبکه ها و نمودارها دارد. یکی از معروف ترین این کتابخانه ها [NetworkX](http://networkx.github.io/) است که از جمله ویژگی های آن داشتن الگوریتم های استاندارد گراف برای تحلیل شبکه ها و فرآیندهای مربوط به نمایش نمودارها است. -در زیر نمونه ای از کد آورده شده است که یک گراف تصادفی ایجاد و رسم می کند. رنگ گره ها براساس طول کوتاه ترین مسیر از یک گره ی مرکزی مشخص تعیین می شود. +در زیر نمونه ای از کد آورده شده است که یک گراف تصادفی ایجاد و رسم می کند که رنگ گره ها براساس طول کوتاه ترین مسیر از یک گره ی مرکزی مشخص تعیین می شود. -```{code-cell} python3 +```{code-cell} ipython import networkx as nx import matplotlib.pyplot as plt np.random.seed(1234) diff --git a/lectures/images/about-py/pytorch_vs_matlab.png b/lectures/images/about-py/pytorch_vs_matlab.png index 7230ad0..733e6d6 100644 Binary files a/lectures/images/about-py/pytorch_vs_matlab.png and b/lectures/images/about-py/pytorch_vs_matlab.png differ diff --git a/lectures/python_by_example.md b/lectures/python_by_example.md index e7c79fd..a7ed1d4 100644 --- a/lectures/python_by_example.md +++ b/lectures/python_by_example.md @@ -255,7 +255,7 @@ x x.append(2.5) x ``` -در اینجا `append()` یک **متد** **(method)** محسوب می شود. متد ها توابعی هستند که به یک شیء متصل می شوند. (در اینجا به لیست X متصل شده است) +در اینجا `()append` یک **متد** **(method)** محسوب می شود. متد ها توابعی هستند که به یک شیء متصل می شوند. (در اینجا به لیست X متصل شده است) ما در ادامه به طور کامل با متدها آشنا خواهیم شد، اما برای درک اولیه: @@ -264,7 +264,7 @@ x * هر نوع شیء در پایتون متدهای مخصوص به خود را دارد، برای مثال اشیاء رشته ای دارای [متدهای مخصوص رشته ها](https://docs.python.org/3/library/stdtypes.html#string-methods) هستند ،لیست ها [متد لیستی](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists) دارند. -یکی دیگر از متدهای کاربردی لیست، `pop()` است. +یکی دیگر از متدهای کاربردی لیست، `()pop` است. ```{code-cell} python3 x