-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
55cd2f9
commit 7520613
Showing
1 changed file
with
396 additions
and
0 deletions.
There are no files selected for viewing
396 changes: 396 additions & 0 deletions
396
Machine Learning/ch2.numpy/numpy_land_of_misery/land_of_misery.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,396 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"<h1 align=center style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"سرزمین فلاکت\n", | ||
"</font>\n", | ||
"</h1>\n", | ||
"\n", | ||
"<p dir=rtl style=\"direction: rtl;text-align: justify;line-height:200%;font-family:vazir;font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
"در این تمرین قصد داریم به سازمان حمایت از کارتنخوابها کمک کنیم تا بتوانند در روزهای سرد خدمت بهتری به کارتنخوابها ارائه دهند. یک داوطلب دست به کار شده و به مدت یک هفته، هر یک ساعت دمای هوا را در یکی پرکارتنخوابترین مناطق اندازه گرفته و در لیستی به نام <code>temp_list</code> ذخیره کرده است. یعنی در این لیست به ازای هر روز، یک لیست دیگر به طول ۲۴ در نظر گرفته شده که دمای هوا در تمام ساعات (<b>از ساعت ۰۰ تا ۲۳</b>) در آن ذخیره شده است.\n", | ||
"</font>\n", | ||
"</p>\n", | ||
"\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"import numpy as np\n", | ||
"\n", | ||
"temp_list = [[-11,-13,-12,-11,-12,-13,-12,0,1,1,2,4,4,5,6,6,7,8,6,6,5,5,4,3],\n", | ||
" [3,3,2,1,0,1,1,3,3,4,3,4,4,5,4,4,4,3,4,3,3,2,1,0],\n", | ||
" [0,-11,-11,-12,-13,-11,1,1,2,3,4,5,3,2,2,1,1,1,0,0,-11,-11,-12,-13],\n", | ||
" [-13,-13,-14,-14,-15,-16,-16,-15,-14,-14,-13,-12,-12,0,0,1,1,2,1,1,0,-11,-11,-11],\n", | ||
" [-11,-12,-13,-13,-13,-12,-11,0,0,1,2,2,3,4,3,5,3,2,1,1,2,1,0,1],\n", | ||
" [1,1,0,-11,-11,-12,-11,-11,0,1,1,1,2,3,2,3,4,5,6,4,2,2,1,1],\n", | ||
" [0,0,1,0,-11,0,1,1,2,3,3,4,3,4,5,8,7,6,6,5,6,6,5,4]]" | ||
] | ||
}, | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"<h2 align=right style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"قسمت اول\n", | ||
"</font>\n", | ||
"</h2>\n", | ||
"<p dir=rtl style=\"direction: rtl;text-align: justify;line-height:200%;font-family:vazir;font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
"ابتدا لیست <code>temp_list</code> را تبدیل به آرایهی نامپای کرده و در متغیری به نام <code>temp</code> ذخیره کنید.\n", | ||
"</font>\n", | ||
"</p>\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 2, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"data": { | ||
"text/plain": [ | ||
"array([[-11, -13, -12, -11, -12, -13, -12, 0, 1, 1, 2, 4, 4,\n", | ||
" 5, 6, 6, 7, 8, 6, 6, 5, 5, 4, 3],\n", | ||
" [ 3, 3, 2, 1, 0, 1, 1, 3, 3, 4, 3, 4, 4,\n", | ||
" 5, 4, 4, 4, 3, 4, 3, 3, 2, 1, 0],\n", | ||
" [ 0, -11, -11, -12, -13, -11, 1, 1, 2, 3, 4, 5, 3,\n", | ||
" 2, 2, 1, 1, 1, 0, 0, -11, -11, -12, -13],\n", | ||
" [-13, -13, -14, -14, -15, -16, -16, -15, -14, -14, -13, -12, -12,\n", | ||
" 0, 0, 1, 1, 2, 1, 1, 0, -11, -11, -11],\n", | ||
" [-11, -12, -13, -13, -13, -12, -11, 0, 0, 1, 2, 2, 3,\n", | ||
" 4, 3, 5, 3, 2, 1, 1, 2, 1, 0, 1],\n", | ||
" [ 1, 1, 0, -11, -11, -12, -11, -11, 0, 1, 1, 1, 2,\n", | ||
" 3, 2, 3, 4, 5, 6, 4, 2, 2, 1, 1],\n", | ||
" [ 0, 0, 1, 0, -11, 0, 1, 1, 2, 3, 3, 4, 3,\n", | ||
" 4, 5, 8, 7, 6, 6, 5, 6, 6, 5, 4]])" | ||
] | ||
}, | ||
"execution_count": 2, | ||
"metadata": {}, | ||
"output_type": "execute_result" | ||
} | ||
], | ||
"source": [ | ||
"temp = np.array(temp_list)\n", | ||
"temp" | ||
] | ||
}, | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"\n", | ||
"<h2 align=right style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"قسمت دوم\n", | ||
"</font>\n", | ||
"</h2>\n", | ||
"<p dir=rtl style=\"direction: rtl;text-align: justify;line-height:200%;font-family:vazir;font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
"داوطلب ما که دما را اندازهگیری کرده پس از مشاهدهی نتایج متوجه شده است که دستگاه اندازهگیریاش چینی بوده و در دماهای زیر صفر، دما را ۱۰ درجه کمتر ثبت کرده است. بهعنوان مثال اگر دما ۱- بوده، این دستگاه دما را ۱۱- ثبت کرده است. در این قسمت مقادیری که اشتباه ثبت شدهاند را اصلاح کرده و کل مقادیر را با همان ترتیب قبل در متغیر <code>temp_correct</code> ذخیره کنید.\n", | ||
"</font>\n", | ||
"</p>\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[[-11 -13 -12 -11 -12 -13 -12 0 1 1 2 4 4 5 6 6 7 8\n", | ||
" 6 6 5 5 4 3]\n", | ||
" [ 3 3 2 1 0 1 1 3 3 4 3 4 4 5 4 4 4 3\n", | ||
" 4 3 3 2 1 0]\n", | ||
" [ 0 -11 -11 -12 -13 -11 1 1 2 3 4 5 3 2 2 1 1 1\n", | ||
" 0 0 -11 -11 -12 -13]\n", | ||
" [-13 -13 -14 -14 -15 -16 -16 -15 -14 -14 -13 -12 -12 0 0 1 1 2\n", | ||
" 1 1 0 -11 -11 -11]\n", | ||
" [-11 -12 -13 -13 -13 -12 -11 0 0 1 2 2 3 4 3 5 3 2\n", | ||
" 1 1 2 1 0 1]\n", | ||
" [ 1 1 0 -11 -11 -12 -11 -11 0 1 1 1 2 3 2 3 4 5\n", | ||
" 6 4 2 2 1 1]\n", | ||
" [ 0 0 1 0 -11 0 1 1 2 3 3 4 3 4 5 8 7 6\n", | ||
" 6 5 6 6 5 4]]\n" | ||
] | ||
}, | ||
{ | ||
"data": { | ||
"text/plain": [ | ||
"array([[-1, -3, -2, -1, -2, -3, -2, 0, 1, 1, 2, 4, 4, 5, 6, 6,\n", | ||
" 7, 8, 6, 6, 5, 5, 4, 3],\n", | ||
" [ 3, 3, 2, 1, 0, 1, 1, 3, 3, 4, 3, 4, 4, 5, 4, 4,\n", | ||
" 4, 3, 4, 3, 3, 2, 1, 0],\n", | ||
" [ 0, -1, -1, -2, -3, -1, 1, 1, 2, 3, 4, 5, 3, 2, 2, 1,\n", | ||
" 1, 1, 0, 0, -1, -1, -2, -3],\n", | ||
" [-3, -3, -4, -4, -5, -6, -6, -5, -4, -4, -3, -2, -2, 0, 0, 1,\n", | ||
" 1, 2, 1, 1, 0, -1, -1, -1],\n", | ||
" [-1, -2, -3, -3, -3, -2, -1, 0, 0, 1, 2, 2, 3, 4, 3, 5,\n", | ||
" 3, 2, 1, 1, 2, 1, 0, 1],\n", | ||
" [ 1, 1, 0, -1, -1, -2, -1, -1, 0, 1, 1, 1, 2, 3, 2, 3,\n", | ||
" 4, 5, 6, 4, 2, 2, 1, 1],\n", | ||
" [ 0, 0, 1, 0, -1, 0, 1, 1, 2, 3, 3, 4, 3, 4, 5, 8,\n", | ||
" 7, 6, 6, 5, 6, 6, 5, 4]])" | ||
] | ||
}, | ||
"execution_count": 3, | ||
"metadata": {}, | ||
"output_type": "execute_result" | ||
} | ||
], | ||
"source": [ | ||
"temp_correct = temp.copy()\n", | ||
"print(temp_correct)\n", | ||
"temp_correct[(temp_correct<0)]+=10\n", | ||
"temp_correct" | ||
] | ||
}, | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"\n", | ||
"<h2 align=right style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"قسمت سوم\n", | ||
"</font>\n", | ||
"</h2>\n", | ||
"<p dir=rtl style=\"direction: rtl;text-align: justifyt;line-height:200%;font-family:vazir;font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
"سازمان حمایت از کارتنخوابها اعلام کرده که دما را به شکل فارنهایت (F°) میخواهد، اما دادههایی که در اختیار ما قرار گرفته به شکل سلسیوس (C°) ثبت شده است. اکنون نیاز است با استفاده از فرمول زیر، دماهای قسمت قبل (آرایهی <code>temp_correct</code>) را به فارنهایت تبدیل کرده و در متغیری به نام <code>temp_F</code> ذخیره کنید.\n", | ||
"</font>\n", | ||
"</p>\n", | ||
"\n", | ||
"$$ F = 1.8 * C + 32 $$\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 4, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[[30.2 26.6 28.4 30.2 28.4 26.6 28.4 32. 33.8 33.8 35.6 39.2 39.2 41.\n", | ||
" 42.8 42.8 44.6 46.4 42.8 42.8 41. 41. 39.2 37.4]\n", | ||
" [37.4 37.4 35.6 33.8 32. 33.8 33.8 37.4 37.4 39.2 37.4 39.2 39.2 41.\n", | ||
" 39.2 39.2 39.2 37.4 39.2 37.4 37.4 35.6 33.8 32. ]\n", | ||
" [32. 30.2 30.2 28.4 26.6 30.2 33.8 33.8 35.6 37.4 39.2 41. 37.4 35.6\n", | ||
" 35.6 33.8 33.8 33.8 32. 32. 30.2 30.2 28.4 26.6]\n", | ||
" [26.6 26.6 24.8 24.8 23. 21.2 21.2 23. 24.8 24.8 26.6 28.4 28.4 32.\n", | ||
" 32. 33.8 33.8 35.6 33.8 33.8 32. 30.2 30.2 30.2]\n", | ||
" [30.2 28.4 26.6 26.6 26.6 28.4 30.2 32. 32. 33.8 35.6 35.6 37.4 39.2\n", | ||
" 37.4 41. 37.4 35.6 33.8 33.8 35.6 33.8 32. 33.8]\n", | ||
" [33.8 33.8 32. 30.2 30.2 28.4 30.2 30.2 32. 33.8 33.8 33.8 35.6 37.4\n", | ||
" 35.6 37.4 39.2 41. 42.8 39.2 35.6 35.6 33.8 33.8]\n", | ||
" [32. 32. 33.8 32. 30.2 32. 33.8 33.8 35.6 37.4 37.4 39.2 37.4 39.2\n", | ||
" 41. 46.4 44.6 42.8 42.8 41. 42.8 42.8 41. 39.2]]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"temp_F = temp_correct.copy()\n", | ||
"temp_F = 1.8*temp_correct+32\n", | ||
"print(temp_F)" | ||
] | ||
}, | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"\n", | ||
"<h2 align=right style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"قسمت چهارم\n", | ||
"</font>\n", | ||
"</h2>\n", | ||
"<p dir=rtl style=\"direction: rtl;text-align: right;line-height:200%;font-family:vazir;font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
"در ادامه از شما خواسته شده که گرمترین ساعت هر روز را به همراه دمای هوا در آن ساعت گزارش دهید، زیرا در این ساعت کارتنخوابها راحتتر میتوانند برای دریافت غذا از کارتن خود خارج شوند.\n", | ||
"\n", | ||
"<br>\n", | ||
"تحلیلهای خود را بر روی آرایهی قسمت قبل (<code>temp_F</code>) انجام دهید و خروجی خود را به شکل یک آرایه با ابعاد <code dir=ltr>(2, 7)</code> در متغیر <code>hottest_times</code> ذخیره کنید. در ردیف اول، ساعت بیشترین دما در هر روز و در ردیف دوم، دمای هوا در آن ساعت را قرار دهید. یعنی خروجی شما باید به شکل زیر باشد:\n", | ||
"\n", | ||
"<table dir=ltr style=\"width:100%; text-align:center\">\n", | ||
" <tr>\n", | ||
" <th><font face=\"vazir\" size=3>ساعت بیشترین دما در روز اول</th>\n", | ||
" <th><font face=\"vazir\" size=3>ساعت بیشترین دما در روز دوم</th>\n", | ||
" <th><font face=\"vazir\" size=3>...</th>\n", | ||
" <th><font face=\"vazir\" size=3>ساعت بیشترین دما در روز هفتم</th>\n", | ||
"\n", | ||
" </tr>\n", | ||
" <tr>\n", | ||
" <th><font face=\"vazir\" size=3>بیشترین دما در روز اول</th>\n", | ||
" <th><font face=\"vazir\" size=3>بیشترین دما در روز دوم</th>\n", | ||
" <th><font face=\"vazir\" size=3>...</th>\n", | ||
" <th><font face=\"vazir\" size=3>بیشترین دما در روز هفتم</th>\n", | ||
" </tr>\n", | ||
" \n", | ||
"\n", | ||
"</table>\n", | ||
"</font>\n", | ||
"</p>" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 5, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[[17. 13. 11. 17. 15. 18. 15. ]\n", | ||
" [46.4 41. 41. 35.6 41. 42.8 46.4]]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"hottest_times = np.array([np.argmax(temp_F,axis=1),temp_F.max(axis=1)])\n", | ||
"print(hottest_times)" | ||
] | ||
}, | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"<h2 align=right style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"قسمت پنجم\n", | ||
"</font>\n", | ||
"</h2>\n", | ||
"\n", | ||
"<p dir=rtl style=\"direction: rtl;text-align: justify;line-height:200%;font-family:vazir;font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
"در آخر از شما میخواهیم شماره روزی که میانگین دما در آن <b>کمترین</b> بوده را همراه با خود مقدار میانگین دما در آرایهی <code>coldest_day</code> ذخیره کنید، تا سازمان بتواند در چنین روزی بین کارتنخوابها نوشیدنی گرم هم پخش کند.\n", | ||
"\n", | ||
"<br>\n", | ||
"تحلیلهای خود را بر روی آرایهی <code>temp_F</code> انجام دهید و خروجی خود را به شکل یک آرایهی تکبعدی به طول ۲ در متغیر <code>coldest_day</code> ذخیره کنید. در عنصر اول، شماره روز با کمترین میانگین دما (بین ۰ تا ۶) و در عنصر دوم، میانگین دما در آن روز را قرار دهید. یعنی خروجی شما باید به شکل زیر باشد:\n", | ||
"\n", | ||
"<table dir=ltr style=\"width:100%\">\n", | ||
" <tr>\n", | ||
" <th><font face=\"vazir\" size=3>روز</th>\n", | ||
" <th><font face=\"vazir\" size=3>دما</th>\n", | ||
" </tr>\n", | ||
"</table>\n", | ||
"\n", | ||
"</font>\n", | ||
"</p>\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 6, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[3, 28.400000000000002]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"coldest_day = [np.argmin(np.mean(temp_F,axis=1)),np.min(np.mean(temp_F,axis=1))]\n", | ||
"print(coldest_day)" | ||
] | ||
}, | ||
{ | ||
"attachments": {}, | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"<h2 align=right style=\"line-height:200%;font-family:vazir;color:#0099cc\">\n", | ||
"<font face=\"vazir\" color=\"#0099cc\">\n", | ||
"<b>سلول جوابساز</b>\n", | ||
"</font>\n", | ||
"</h2>\n", | ||
"\n", | ||
"\n", | ||
"<p dir=rtl style=\"direction: rtl; text-align: justify; line-height:200%; font-family:vazir; font-size:medium\">\n", | ||
"<font face=\"vazir\" size=3>\n", | ||
" برای ساختهشدن فایل <code>result.zip</code> سلول زیر را اجرا کنید. توجه داشته باشید که پیش از اجرای سلول زیر تغییرات اعمال شده در نتبوک را ذخیره کرده باشید (<code>ctrl+s</code>) تا در صورت نیاز به پشتیبانی امکان بررسی کد شما وجود داشته باشد.\n", | ||
"</font>\n", | ||
"</p>" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 7, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"File Paths:\n", | ||
"['answers.npz', 'land_of_misery.ipynb']\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"import zlib\n", | ||
"import zipfile\n", | ||
"\n", | ||
"np.savez(\"answers.npz\", temp = temp, temp_correct = temp_correct, \n", | ||
" temp_F = temp_F, hottest_times = hottest_times, coldest_day = coldest_day)\n", | ||
"\n", | ||
"\n", | ||
"def compress(file_names):\n", | ||
" print(\"File Paths:\")\n", | ||
" print(file_names)\n", | ||
" compression = zipfile.ZIP_DEFLATED\n", | ||
" with zipfile.ZipFile(\"result.zip\", mode=\"w\") as zf:\n", | ||
" for file_name in file_names:\n", | ||
" zf.write('./' + file_name, file_name, compress_type=compression)\n", | ||
"\n", | ||
"file_names = [\"answers.npz\", \"land_of_misery.ipynb\"]\n", | ||
"compress(file_names)" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "qenv", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.8.1" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 4 | ||
} |