در این مطلب، ویدئو سرعت انبوه کد پایتون با کامپایل Numba با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:16:27
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:04,240 –> 00:00:09,120
[موسیقی]
2
00:00:09,120 –> 00:00:10,719
بچهها در ویدیوی امروز به چه اتفاقی میافتد خوش آمدید
3
00:00:10,719 –> 00:00:12,080
، ما میخواهیم یاد بگیریم که
4
00:00:12,080 –> 00:00:14,080
چگونه سرعت کد پایتون خود را با
5
00:00:14,080 –> 00:00:16,480
شماره در کامپایلسازی بهموقع افزایش
6
00:00:16,480 –> 00:00:18,160
دهیم، بنابراین اجازه دهید به درستی وارد آن شویم
7
00:00:18,160 –> 00:00:19,520
تا اولین کاری که میخواهیم انجام دهیم این
8
00:00:19,520 –> 00:00:21,279
است. ما می خواهیم یک ترمینال
9
00:00:21,279 –> 00:00:23,119
به عنوان مثال cmd در ویندوز باز کنیم و می
10
00:00:23,119 –> 00:00:24,640
خواهیم بگوییم
11
00:00:24,640 –> 00:00:28,320
عدد نصب پیپ و همانطور که گفتم عدد یک
12
00:00:28,320 –> 00:00:30,160
کامپایلر بهنگام است
13
00:00:30,160 –> 00:00:32,640
یک کامپایلر درست در زمان با کارایی بالا
14
00:00:32,640 –> 00:00:34,559
که اساساً به این معنی است که ما
15
00:00:34,559 –> 00:00:36,559
قطعات خاصی از پایتون را کامپایل می کنیم. کد
16
00:00:36,559 –> 00:00:39,200
در طول زمان اجرا، بنابراین ما یک
17
00:00:39,200 –> 00:00:40,800
تابع مشخص داریم، این
18
00:00:40,800 –> 00:00:43,440
تابع یک تابع پایتون معمولی است و
19
00:00:43,440 –> 00:00:44,000
اولین بار
20
00:00:44,000 –> 00:00:45,440
که آن تابع را اجرا می کنیم
21
00:00:45,440 –> 00:00:47,600
به کد ماشین کامپایل می شود و بار دوم
22
00:00:47,600 –> 00:00:48,480
23
00:00:48,480 –> 00:00:50,079
که آن تابع را فراخوانی می کنیم،
24
00:00:50,079 –> 00:00:51,920
توسط تابع تفسیر نمی شود. مفسر پایتون
25
00:00:51,920 –> 00:00:53,760
قرار است به عنوان کد ماشین اجرا شود
26
00:00:53,760 –> 00:00:56,000
که به طور قابل توجهی سریعتر است،
27
00:00:56,000 –> 00:00:57,680
بنابراین برای انجام این کار باید آن را
28
00:00:57,680 –> 00:00:59,359
از
29
00:00:59,359 –> 00:01:02,719
وارد کردن اعداد به موقع ذخیره کنیم،
30
00:01:02,719 –> 00:01:06,720
بنابراین این اساساً به این معنی است
31
00:01:06,720 –> 00:01:09,760
که دقیقاً به موقع مانند
32
00:01:09,760 –> 00:01:12,720
آن به صورت تصادفی وارد
33
00:01:12,720 –> 00:01:13,920
می کنیم و
34
00:01:13,920 –> 00:01:15,280
ریاضی را وارد می کنیم زیرا یک
35
00:01:15,280 –> 00:01:17,119
تابع بسیار ساده را در اینجا انجام می دهیم، این تابع
36
00:01:17,119 –> 00:01:20,560
خیلی جالب نخواهد بود، فقط
37
00:01:20,560 –> 00:01:23,759
تابعی است که پارامتر n دارد و
38
00:01:23,759 –> 00:01:25,040
ما این کار را انجام خواهیم داد. برخی از محاسبات تصادفی،
39
00:01:25,040 –> 00:01:26,960
بنابراین این در
40
00:01:26,960 –> 00:01:28,720
اینجا هیچ معناداری ندارد، من فقط دارم
41
00:01:28,720 –> 00:01:31,119
تابعی می
42
00:01:31,119 –> 00:01:33,439
سازم که محاسبات uh را انجام می دهد تا مدتی طول بکشد
43
00:01:33,439 –> 00:01:34,240
44
00:01:34,240 –> 00:01:37,040
تا بتوانیم سرعت را اندازه گیری کنیم بنابراین
45
00:01:37,040 –> 00:01:38,400
اساساً من فقط می خواهم بگویم z
46
00:01:38,400 –> 00:01:41,680
برابر با 0 است. برای i در محدوده
47
00:01:41,680 –> 00:01:44,960
n می گوییم x برابر است با
48
00:01:44,960 –> 00:01:48,399
نقطه تصادفی تصادفی
49
00:01:49,040 –> 00:01:52,079
y برابر است با نقطه تصادفی تصادفی و سپس z
50
00:01:52,079 –> 00:01:55,200
برابر است با نقطه sqrt
51
00:01:55,200 –> 00:01:58,479
x مربع بعلاوه
52
00:01:58,479 –> 00:02:01,439
y مربع بنابراین هیچ چیز خیلی جالبی نیست و
53
00:02:01,439 –> 00:02:03,520
در پایان در نهایت
54
00:02:03,520 –> 00:02:05,200
z و از را برمی گردانیم البته ما فقط میخواهیم
55
00:02:05,200 –> 00:02:07,360
بگوییم مساوی نیست، بلکه به علاوه مساوی است،
56
00:02:07,360 –> 00:02:09,919
بنابراین باز هم هیچ منطق واقعی پشت
57
00:02:09,919 –> 00:02:11,520
این محاسبه وجود ندارد، این فقط
58
00:02:11,520 –> 00:02:13,040
کاری است که ما انجام میدهیم، البته شما
59
00:02:13,040 –> 00:02:14,800
همچنین میتوانید به چیزی که
60
00:02:14,800 –> 00:02:15,680
منطقی است
61
00:02:15,680 –> 00:02:17,599
برسید، اما این فقط مقداری محاسبه است.
62
00:02:17,599 –> 00:02:18,879
حالا میتوانیم جلو
63
00:02:18,879 –> 00:02:22,640
برویم زمان پورت حدس میزنم
64
00:02:22,640 –> 00:02:25,120
اکنون میتوانیم جلو برویم و زمان
65
00:02:25,120 –> 00:02:28,000
لازم را اندازهگیری کنیم، بنابراین میتوانیم بگوییم شروع برابر است با
66
00:02:28,000 –> 00:02:31,360
زمان و
67
00:02:31,360 –> 00:02:34,840
همچنین زمان، و سپس میتوانیم بگوییم uh
68
00:02:34,840 –> 00:02:37,519
print یا در واقع ما نمیخواهیم
69
00:02:37,519 –> 00:02:38,720
این را چاپ کنیم
70
00:02:38,720 –> 00:02:40,560
زیرا خود چاپ
71
00:02:40,560 –> 00:02:43,440
خیلی زمان می برد، اوه، ما می خواهیم
72
00:02:43,440 –> 00:02:46,879
یک تابع بگوییم و اجازه دهید ببینم
73
00:02:46,879 –> 00:02:50,400
چه عددی برای اندازه گیری
74
00:02:50,400 –> 00:02:52,720
آن ها سه صفر شش صفر هستند، خوب
75
00:02:52,720 –> 00:02:54,160
ده میلیون
76
00:02:54,160 –> 00:02:57,440
یک دو سه، دو سه،
77
00:02:57,440 –> 00:03:00,239
تا ما بتوانیم زمان را اندازه گیری کنیم. اجرای این کار طول می کشد
78
00:03:00,239 –> 00:03:02,400
79
00:03:02,400 –> 00:03:04,239
و ما می توانیم بدون هیچ گونه افزایش سرعت
80
00:03:04,239 –> 00:03:05,599
ببینیم که ما هیچ کامپایلی انجام نمی دهیم،
81
00:03:05,599 –> 00:03:07,599
اما فقط
82
00:03:07,599 –> 00:03:09,840
تابع پایتون معمولی را در اینجا اجرا می کنیم،
83
00:03:09,840 –> 00:03:13,680
اوه در اینجا مدتی طول می کشد
84
00:03:13,680 –> 00:03:15,599
، احتمالاً چهار یا هشت
85
00:03:15,599 –> 00:03:18,319
ثانیه یا چیزی دیگر طول می کشد. مثل آن
86
00:03:18,319 –> 00:03:21,840
شاید باید یک صفر را حذف کنیم
87
00:03:22,239 –> 00:03:24,640
اوه خیلی طول می کشد اوه شما
88
00:03:24,640 –> 00:03:25,280
بروید
89
00:03:25,280 –> 00:03:26,720
و البته من احمق هستم زیرا
90
00:03:26,720 –> 00:03:28,799
نتیجه و
91
00:03:28,799 –> 00:03:31,519
منهای شروع را چاپ نکردم بنابراین می توانیم دوباره صبر کنیم اما
92
00:03:31,519 –> 00:03:34,000
دیدید که مدت زیادی طول می کشد بنابراین
93
00:03:34,000 –> 00:03:36,560
اگر ما موفق به سرعت بخشیدن به این
94
00:03:36,560 –> 00:03:38,000
علامت مشخصاً
95
00:03:38,000 –> 00:03:40,640
اوه پس عدد مشخصاً کار میکند،
96
00:03:40,640 –> 00:03:42,799
بنابراین هشت ثانیه یا چیزی یا
97
00:03:42,799 –> 00:03:45,440
شش ثانیه طول میکشد، هفت نه، نمیدانم، اوه،
98
00:03:45,440 –> 00:03:47,280
اما مدتی طول میکشد که درست مثل آن کار نمیکند،
99
00:03:47,280 –> 00:03:48,239
100
00:03:48,239 –> 00:03:51,599
13 ثانیه در واقع خوب است، بنابراین ما
101
00:03:51,599 –> 00:03:52,879
اینجا 13 ثانیه داریم. شاید
102
00:03:52,879 –> 00:03:55,840
بتوانیم آن را 13 ثانیه بنویسیم که اکنون تنها کاری که ما
103
00:03:55,840 –> 00:03:57,680
باید انجام دهیم تا سرعت آن
104
00:03:57,680 –> 00:04:00,000
را افزایش دهیم این است که باید یک حاشیه نویسی یک
105
00:04:00,000 –> 00:04:00,959
تزئین کننده اضافه
106
00:04:00,959 –> 00:04:04,159
کنیم که بگوید دقیقاً در زمان
107
00:04:04,159 –> 00:04:07,360
مقرر چیزی که وجود دارد این است که این تگ jit
108
00:04:07,360 –> 00:04:07,920
گزینه ای
109
00:04:07,920 –> 00:04:11,200
به نام no python دارد که ما می توانیم تنظیم کنیم. این روی true است
110
00:04:11,200 –> 00:04:13,120
و اگر چیزی را تنظیم نکنیم میتوانیم آن را روی false
111
00:04:13,120 –> 00:04:15,439
تنظیم کنیم، این
112
00:04:15,439 –> 00:04:17,358
اساساً به این معنی است که اگر
113
00:04:17,358 –> 00:04:19,440
شماره به دلایلی قادر به کامپایل این
114
00:04:19,440 –> 00:04:21,199
کد در ماشین نباشد،
115
00:04:21,199 –> 00:04:23,440
ما دوباره به حالت ترکیبی
116
00:04:23,440 –> 00:04:26,160
برمیگردیم تا مفسر پایتون
117
00:04:26,160 –> 00:04:28,639
و بدون پایتون یعنی بدون پایتون هیچ پایتون
118
00:04:28,639 –> 00:04:29,680
به این معنی است
119
00:04:29,680 –> 00:04:31,520
که آن را در کد ماشین کامپایل کنید و سپس
120
00:04:31,520 –> 00:04:33,360
از آن به عنوان کد ماشین استفاده کنید، فقط
121
00:04:33,360 –> 00:04:35,199
مفسر اینجا چیزی برای گفتن ندارد،
122
00:04:35,199 –> 00:04:36,000
123
00:04:36,000 –> 00:04:37,680
بنابراین با این تابع
124
00:04:37,680 –> 00:04:40,800
با numpy به خوبی کار می کند.
125
00:04:40,800 –> 00:04:42,400
ما با پانداها خوب کار می کنیم با
126
00:04:42,400 –> 00:04:44,240
مشکلاتی روبرو خواهیم شد،
127
00:04:44,240 –> 00:04:47,440
بنابراین ما اکنون می خواهیم این را دوباره اجرا
128
00:04:47,440 –> 00:04:47,840
129
00:04:47,840 –> 00:04:50,160
کنیم بدون اینکه پایتون برابر با true باشد و
130
00:04:50,160 –> 00:04:51,440
تگ jit و شما خواهید دید که
131
00:04:51,440 –> 00:04:53,680
سرعت قابل توجهی افزایش می یابد.
132
00:04:53,680 –> 00:04:58,400
امیدوارم 1.779 ثانیه پیش بروید.
133
00:04:58,400 –> 00:05:02,000
اوم
134
00:05:02,000 –> 00:05:03,759
و این فقط به این دلیل است که اکنون آن را کامپایل کرده
135
00:05:03,759 –> 00:05:06,160
ایم، فکر می کنم
136
00:05:06,160 –> 00:05:08,479
اگر بتوانیم این را برای بار دوم اجرا کنیم،
137
00:05:08,479 –> 00:05:10,000
حتی
138
00:05:10,000 –> 00:05:12,000
سریعتر می شود زیرا
139
00:05:12,000 –> 00:05:14,320
اولین باری که این
140
00:05:14,320 –> 00:05:16,560
تابع را صدا می زنیم باید به این موضوع فکر کنید، آن را نیز در آن 1.7 کامپایل می کنیم.
141
00:05:16,560 –> 00:05:19,520
ما از قبل
142
00:05:19,520 –> 00:05:20,880
زمان کامپایل را داشتیم
143
00:05:20,880 –> 00:05:23,120
نه فقط زمان اجرا، بنابراین اگر
144
00:05:23,120 –> 00:05:24,000
اکنون دوباره این
145
00:05:24,000 –> 00:05:27,039
را اجرا کنم باید بتوانیم این روش را سریعتر اجرا کنیم،
146
00:05:27,039 –> 00:05:30,479
بنابراین
147
00:05:31,280 –> 00:05:34,479
بیایید ببینیم اینجا چه اتفاقی می
148
00:05:34,479 –> 00:05:39,520
149
00:05:39,520 –> 00:05:42,720
افتد.
150
00:05:42,720 –> 00:05:45,360
زمان اجرای کد ماشین
151
00:05:45,360 –> 00:05:47,280
این مفسر پایتون نیست
152
00:05:47,280 –> 00:05:49,199
و همچنین زمان کامپایل نیست، این
153
00:05:49,199 –> 00:05:50,080
فقط
154
00:05:50,080 –> 00:05:53,520
زمان اجرای خام است، بنابراین این 13 ثانیه است
155
00:05:53,520 –> 00:05:57,520
در مقایسه با 0.293 ثانیه،
156
00:05:57,520 –> 00:06:00,479
بسیار سریع است، خیلی خوب است، بنابراین فقط
157
00:06:00,479 –> 00:06:02,160
یک زمان ساده است. تابع e python با
158
00:06:02,160 –> 00:06:03,520
محاسبات
159
00:06:03,520 –> 00:06:06,240
uh و در مستندات میگوید که
160
00:06:06,240 –> 00:06:06,800
عدد
161
00:06:06,800 –> 00:06:09,680
دوست دارد حلقهها تعداد دوست دارد شماره پخش
162
00:06:09,680 –> 00:06:12,080
محاسبات را دوست دارد و عدد
163
00:06:12,080 –> 00:06:14,800
نیز numpy را دوست دارد بنابراین اگر ما
164
00:06:14,800 –> 00:06:17,199
با numpy کار میکنیم این نیز باید
165
00:06:17,199 –> 00:06:20,400
بدون مشکل کار کند
166
00:06:20,400 –> 00:06:23,520
import numpy snp ما میخواهیم حالا
167
00:06:23,520 –> 00:06:25,039
تابع دیگری دارید
168
00:06:25,039 –> 00:06:26,400
اوه و این تابع در
169
00:06:26,400 –> 00:06:28,319
واقع کاملاً مشابه خواهد بود، ما همان کار را
170
00:06:28,319 –> 00:06:30,560
انجام می دهیم اما با پاک کردن numpy نه
171
00:06:30,560 –> 00:06:31,120
فقط با
172
00:06:31,120 –> 00:06:34,000
ارقام جداگانه، بنابراین اول از همه بیایید
173
00:06:34,000 –> 00:06:35,919
این تگ jit را در اینجا حذف کنیم و
174
00:06:35,919 –> 00:06:37,680
خواهیم داشت همان تابع
175
00:06:37,680 –> 00:06:41,919
مجموع تابع um و z اکنون
176
00:06:41,919 –> 00:06:44,960
np نقطه
177
00:06:44,960 –> 00:06:48,319
صفرهای شکل n n خواهد بود
178
00:06:48,319 –> 00:06:50,240
و پس از آن ما در واقع باید
179
00:06:50,240 –> 00:06:52,240
آنها را با
180
00:06:52,240 –> 00:06:55,280
پرانتز در اینجا احاطه کنیم زیرا این یک شکل است
181
00:06:55,280 –> 00:06:57,039
و سپس می خواهیم برای i در بگوییم
182
00:06:57,039 –> 00:06:59,199
محدوده n و در اینجا ما اکنون
183
00:06:59,199 –> 00:07:02,080
آرایه numpy تصادفی را تعریف یا تولید می
184
00:07:02,080 –> 00:07:02,720
کنیم، بنابراین می خواهیم بگوییم
185
00:07:02,720 –> 00:07:05,840
np نقطه تصادفی
186
00:07:05,840 –> 00:07:09,360
rand شکل n
187
00:07:09,520 –> 00:07:13,280
n ما همان کار را برای y
188
00:07:13,280 –> 00:07:16,720
و برای z که اکنون می خواهیم انجام دهیم np
189
00:07:16,720 –> 00:07:20,880
dot sqrt و بقیه را انجام دهید ثابت می ماند،
190
00:07:20,880 –> 00:07:22,479
بنابراین در واقع همان تابع است، اما
191
00:07:22,479 –> 00:07:24,240
ما اکنون آن را با آرایه های numpy انجام می دهیم
192
00:07:24,240 –> 00:07:24,880
193
00:07:24,880 –> 00:07:28,800
که محاسبات بسیار بیشتری در اینجا مورد نیاز است،
194
00:07:28,800 –> 00:07:31,520
اما این در واقع بسیار ساده است، بنابراین
195
00:07:31,520 –> 00:07:33,520
می توانیم به جلو برویم و زمان اجرای واقعی را اندازه گیری
196
00:07:33,520 –> 00:07:35,680
کنیم، اما از آنجایی که ما در
197
00:07:35,680 –> 00:07:37,759
مورد یک مسابقه در اینجا ما نمی توانیم فقط با
198
00:07:37,759 –> 00:07:38,639
10 میلیون پیش
199
00:07:38,639 –> 00:07:41,840
برویم، باید یک مقدار کوچکتر را انتخاب کنیم، بیایید
200
00:07:41,840 –> 00:07:44,000
با 500 برویم.
201
00:07:44,000 –> 00:07:47,440
و بیایید همه اینها را حذف کنیم،
202
00:07:48,800 –> 00:07:50,720
حالا ببینیم چقدر طول می کشد بدون
203
00:07:50,720 –> 00:07:54,560
هیچ گونه بهینه سازی بدون هیچ کامپایل
204
00:07:54,560 –> 00:07:58,400
، باید چند ثانیه طول بکشد.
205
00:07:58,400 –> 00:08:00,720
برای 500 عنصر در حال حاضر این 500 عنصر نیست، بلکه
206
00:08:00,720 –> 00:08:03,759
500 ضربدر 500 است،
207
00:08:03,759 –> 00:08:05,440
بنابراین در اینجا عدد بسیار بزرگی است،
208
00:08:05,440 –> 00:08:07,440
بنابراین باید 8.48
209
00:08:07,440 –> 00:08:10,319
ثانیه طول بکشد تا 500 یا n
210
00:08:10,319 –> 00:08:12,160
برابر با 500 uh پردازش شود،
211
00:08:12,160 –> 00:08:14,319
اگر ما ادامه دهیم و اضافه کنیم، اجازه دهید
212
00:08:14,319