Skip to content

Commit 241eb3c

Browse files
authored
🌐 [translation-sync] [functions.md] Update np.random → Generator API (#118)
* Update translation: lectures/functions.md * Update translation: .translate/state/functions.md.yml
1 parent 95cbe66 commit 241eb3c

2 files changed

Lines changed: 27 additions & 23 deletions

File tree

.translate/state/functions.md.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
source-sha: 1f13005646e1f9241baccf1f6e79dff1924043dd
2-
synced-at: "2026-03-20"
3-
model: unknown
4-
mode: RESYNC
1+
source-sha: 1b356ab5e60d8f6939446fd5f47c243593a2abd3
2+
synced-at: "2026-05-04"
3+
model: claude-sonnet-4-6
4+
mode: UPDATE
55
section-count: 7
6-
tool-version: 0.13.0
6+
tool-version: 0.14.1

lectures/functions.md

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ f(2, a=4, b=5)
234234
* یک تابع می‌تواند هر نوع شیء را برگرداند، از جمله توابع.
235235

236236
در بخش‌های بعدی، با مثال‌هایی نشان خواهیم داد که انتقال یک تابع به یک تابع دیگر تا چه حد ساده است.
237+
237238
### توابع یک خطی: `lambda`
238239

239240
```{index} single: Python; lambda functions
@@ -283,16 +284,19 @@ quad(lambda x: x**3, 0, 2)
283284

284285
## کاربردها
285286

287+
286288
### نمونه‌برداری تصادفی
287289

288290
دوباره به این کد از {doc}`درس قبلی <python_by_example>` نگاه کنید
289291

290292
```{code-cell} python3
293+
rng = np.random.default_rng()
294+
291295
ts_length = 100
292296
ϵ_values = [] # empty list
293297
294298
for i in range(ts_length):
295-
e = np.random.randn()
299+
e = rng.standard_normal()
296300
ϵ_values.append(e)
297301
298302
plt.plot(ϵ_values)
@@ -313,7 +317,7 @@ plt.show()
313317
def generate_data(n):
314318
ϵ_values = []
315319
for i in range(n):
316-
e = np.random.randn()
320+
e = rng.standard_normal()
317321
ϵ_values.append(e)
318322
return ϵ_values
319323
@@ -343,9 +347,9 @@ def generate_data(n, generator_type):
343347
ϵ_values = []
344348
for i in range(n):
345349
if generator_type == 'U':
346-
e = np.random.uniform(0, 1)
350+
e = rng.uniform(0, 1)
347351
else:
348-
e = np.random.randn()
352+
e = rng.standard_normal()
349353
ϵ_values.append(e)
350354
return ϵ_values
351355
@@ -365,7 +369,7 @@ plt.show()
365369

366370
حالا، چندین راه وجود دارد که می‌توانیم کد بالا را ساده کنیم.
367371

368-
به عنوان مثال، می‌توانیم شرط‌ها را کاملاً حذف کنیم و فقط نوع خروجی مورد نظر را *به عنوان یک تابع* به برنامه بدهیم.
372+
به عنوان مثال، می‌توانیم شرط‌ها را کاملاً حذف کنیم و فقط نوع خروجی مورد نظر را به عنوان یک تابع، متد، یا شیء [callable](https://typing.python.org/en/latest/spec/callables.html) دیگر به برنامه بدهیم.
369373

370374
برای درک این موضوع، نسخه زیر را در نظر بگیرید.
371375

@@ -378,18 +382,18 @@ def generate_data(n, generator_type):
378382
ϵ_values.append(e)
379383
return ϵ_values
380384
381-
data = generate_data(100, np.random.uniform)
385+
data = generate_data(100, rng.uniform)
382386
plt.plot(data)
383387
plt.show()
384388
```
385389

386-
حالا، وقتی تابع `()generate_data` را فراخوانی می‌کنیم، `np.random.uniform` را به عنوان آرگومان دوم ارسال می‌کنیم.
390+
حالا، وقتی تابع `()generate_data` را فراخوانی می‌کنیم، `rng.uniform` را به عنوان آرگومان دوم ارسال می‌کنیم.
387391

388-
این شیء یک *تابع* است.
392+
این شیء یک *callable* است؛ یعنی شیئی که می‌توان با استفاده از پرانتز آن را فراخوانی کرد.
389393

390-
وقتی فراخوانی تابع `generate_data(100, np.random.uniform)` اجرا می‌شود، پایتون بلوک کد تابع را با `n` برابر با 100 و نام `generator_type` "متصل" به تابع `np.random.uniform` اجرا می‌کند.
394+
وقتی فراخوانی تابع `generate_data(100, rng.uniform)` اجرا می‌شود، پایتون بلوک کد تابع را با `n` برابر با 100 و نام `generator_type` "متصل" به callable ای به نام `rng.uniform` اجرا می‌کند.
391395

392-
* در حالی که این خطوط اجرا می‌شوند، نام‌های `generator_type` و `np.random.uniform` "مترادف" هستند و می‌توانند به روش‌های یکسان استفاده شوند.
396+
* در حالی که این خطوط اجرا می‌شوند، نام‌های `generator_type` و `rng.uniform` "مترادف" هستند و می‌توانند به روش‌های یکسان استفاده شوند.
393397

394398
این اصل به طور کلی هم کار می‌کند؛ به عنوان مثال، قطعه کد زیر را در نظر بگیرید:
395399

@@ -404,7 +408,7 @@ m(7, 2, 4)
404408

405409
در اینجا ما نام دیگری برای تابع داخلی `()max` ایجاد کردیم که سپس می‌توانست به روش‌های یکسان استفاده شود.
406410

407-
در چارچوب برنامه ما، توانایی اتصال نام‌های جدید به توابع به این معنی است که هیچ مشکلی در *ارسال یک تابع به عنوان آرگومان به تابع دیگر* وجود ندارد؛همانطور که در بالا انجام دادیم.
411+
در چارچوب برنامه ما، توانایی اتصال نام‌ها به توابع، یا به طور کلی‌تر به اشیاء callable، به این معنی است که هیچ مشکلی در ارسال یک شیء callable به عنوان آرگومان به callable دیگر وجود ندارد؛ همانطور که با `rng.uniform` در بالا انجام دادیم.
408412

409413
(recursive_functions)=
410414
## فراخوانی‌ توابع بازگشتی (پیشرفته)
@@ -502,7 +506,7 @@ factorial(4)
502506

503507
[متغیر تصادفی دوجمله‌ای](https://en.wikipedia.org/wiki/Binomial_distribution) $Y \sim Bin(n, p)$ نشان‌دهنده تعداد موفقیت‌ها در $n$ آزمایش دودویی است که هر آزمایش با احتمال $p$ موفق می‌شود.
504508

505-
بدون هیچ import به جز `from numpy.random import uniform`، تابعی به نام `binomial_rv` بنویسید به طوری که `binomial_rv(n, p)` یک نمونه از $Y$ تولید کند.
509+
با استفاده از `rng = np.random.default_rng()`، تابعی به نام `binomial_rv` بنویسید به طوری که `binomial_rv(n, p)` یک نمونه از $Y$ تولید کند.
506510

507511
```{hint}
508512
:class: dropdown
@@ -520,12 +524,12 @@ factorial(4)
520524
یک راه حل این است:
521525

522526
```{code-cell} python3
523-
from numpy.random import uniform
527+
rng = np.random.default_rng()
524528
525529
def binomial_rv(n, p):
526530
count = 0
527531
for i in range(n):
528-
U = uniform()
532+
U = rng.uniform()
529533
if U < p:
530534
count = count + 1 # Or count += 1
531535
return count
@@ -550,7 +554,7 @@ binomial_rv(10, 0.5)
550554

551555
- اگر شیر `k` بار یا بیشتر در این دنباله ظاهر شود، یک دلار پرداخت کنید.
552556

553-
از هیچ import به جز `from numpy.random import uniform` استفاده نکنید.
557+
از `rng = np.random.default_rng()` برای تولید اعداد تصادفی استفاده کنید.
554558

555559
```{exercise-end}
556560
```
@@ -562,15 +566,15 @@ binomial_rv(10, 0.5)
562566
در اینجا تابعی برای دستگاه تصادفی اول آورده شده است:
563567

564568
```{code-cell} python3
565-
from numpy.random import uniform
569+
rng = np.random.default_rng()
566570
567571
def draw(k): # pays if k consecutive successes in a sequence
568572
569573
payoff = 0
570574
count = 0
571575
572576
for i in range(10):
573-
U = uniform()
577+
U = rng.uniform()
574578
count = count + 1 if U < 0.5 else 0
575579
print(count) # print counts for clarity
576580
if count == k:
@@ -590,7 +594,7 @@ def draw_new(k): # pays if k successes in a sequence
590594
count = 0
591595
592596
for i in range(10):
593-
U = uniform()
597+
U = rng.uniform()
594598
count = count + ( 1 if U < 0.5 else 0 )
595599
print(count)
596600
if count == k:

0 commit comments

Comments
 (0)