Skip to content

Commit 85f2f70

Browse files
authored
🌐 [translation-sync] [numpy.md] Update np.random → Generator API (#122)
* Update translation: lectures/numpy.md * Update translation: .translate/state/numpy.md.yml
1 parent 5a53c42 commit 85f2f70

2 files changed

Lines changed: 32 additions & 46 deletions

File tree

.translate/state/numpy.md.yml

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

lectures/numpy.md

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,6 @@ z
238238

239239
برای خواندن داده‌های آرایه از یک فایل متنی حاوی داده‌های عددی، از `np.loadtxt` استفاده کنید --- برای جزئیات به [مستندات](https://numpy.org/doc/stable/reference/routines.io.html) مراجعه کنید.
240240

241-
242-
243241
### نمایه‌گذاری آرایه
244242

245243
```{index} single: NumPy; Arrays (Indexing)
@@ -400,7 +398,6 @@ z
400398
z.searchsorted(2.2)
401399
```
402400

403-
404401
## عملیات حسابی
405402

406403
```{index} single: NumPy; Arithmetic Operations
@@ -449,7 +446,6 @@ A * B
449446
(numpy_matrix_multiplication)=
450447
به ویژه، `A * B` حاصل‌ضرب ماتریسی *نیست*، بلکه یک حاصل‌ضرب عنصر به عنصر است.
451448

452-
453449
## ضرب ماتریسی
454450

455451
```{index} single: NumPy; Matrix Multiplication
@@ -852,8 +848,6 @@ ax.text(11, 7.0, '?', size=16, ha='center', va='center');
852848
- طبق *مرحله 2*، `b` به `b -> (2, 2, 2)` گسترش خواهد یافت؛
853849
- می‌بینیم که پس از دو مرحله اول، آن‌ها با یکدیگر مطابقت ندارند. بنابراین، یک `ValueError` ایجاد خواهد شد
854850

855-
856-
857851
## قابلیت تغییر و کپی کردن آرایه‌ها
858852

859853
آرایه‌های NumPy انواع داده قابل تغییر هستند، مانند لیست‌های Python.
@@ -865,7 +859,6 @@ ax.text(11, 7.0, '?', size=16, ha='center', va='center');
865859

866860
در این بخش برخی از موضوعات کلیدی را بررسی می‌کنیم.
867861

868-
869862
### قابلیت تغییر
870863

871864
قبلاً نمونه‌هایی از قابلیت تغییر را در بالا دیدیم.
@@ -885,7 +878,8 @@ a
885878
قابلیت تغییر منجر به رفتار زیر می‌شود (که می‌تواند برای برنامه‌نویسان MATLAB شوکه‌کننده باشد...)
886879

887880
```{code-cell} python3
888-
a = np.random.randn(3)
881+
rng = np.random.default_rng()
882+
a = rng.standard_normal(3)
889883
a
890884
```
891885

@@ -915,7 +909,7 @@ a
915909
این کار می‌تواند با استفاده از `np.copy` انجام شود
916910

917911
```{code-cell} python3
918-
a = np.random.randn(3)
912+
a = rng.standard_normal(3)
919913
a
920914
```
921915

@@ -937,14 +931,10 @@ a
937931

938932
توجه کنید که تغییر در `b` بر `a` تأثیر نگذاشته است.
939933

940-
941-
942-
943934
## ویژگی‌های اضافی
944935

945936
بیایید نگاهی به برخی ویژگی‌های مفید دیگر NumPy بیندازیم.
946937

947-
948938
### توابع جهانی
949939

950940
```{index} single: NumPy; Vectorized Functions
@@ -993,7 +983,7 @@ def f(x):
993983
تابع NumPy `np.where` یک جایگزین برداری شده ارائه می‌دهد:
994984

995985
```{code-cell} python3
996-
x = np.random.randn(4)
986+
x = rng.standard_normal(4)
997987
x
998988
```
999989

@@ -1012,7 +1002,6 @@ f(x) # ارسال همان بردار x مانند مثال قب
10121002

10131003
(بعداً خواهیم دید که JAX یک نسخه قدرتمند از `np.vectorize` دارد که می‌تواند و معمولاً کد بسیار کارآمدی تولید می‌کند.)
10141004

1015-
10161005
### مقایسه‌ها
10171006

10181007
```{index} single: NumPy; Comparisons
@@ -1070,11 +1059,12 @@ z[z > 3]
10701059
NumPy برخی از قابلیت‌های اضافی مرتبط با برنامه‌نویسی علمی را
10711060
از طریق بسته‌های فرعی خود ارائه می‌دهد.
10721061

1073-
قبلاً دیده‌ایم که چگونه می‌توانیم با استفاده از np.random متغیرهای تصادفی تولید کنیم
1062+
قبلاً دیده‌ایم که چگونه می‌توانیم با استفاده از
1063+
[`Generator` تصادفی](https://numpy.org/doc/stable/reference/random/generator.html#random-generator) NumPy متغیرهای تصادفی تولید کنیم.
10741064

10751065
```{code-cell} python3
1076-
z = np.random.randn(10000) # تولید توزیع نرمال استاندارد
1077-
y = np.random.binomial(10, 0.5, size=1000) # 1000 نمونه از Bin(10, 0.5)
1066+
z = rng.standard_normal(10000) # تولید توزیع نرمال استاندارد
1067+
y = rng.binomial(10, 0.5, size=1000) # 1000 نمونه از Bin(10, 0.5)
10781068
y.mean()
10791069
```
10801070

@@ -1102,7 +1092,6 @@ np.linalg.inv(A) # محاسبه معکوس
11021092

11031093
برای فهرست جامعی از آنچه در NumPy موجود است به [این مستندات](https://numpy.org/doc/stable/reference/routines.html) مراجعه کنید.
11041094

1105-
11061095
### چندنخی ضمنی
11071096

11081097
[قبلاً](need_for_speed) مفهوم موازی‌سازی از طریق چندنخی را مورد بحث قرار دادیم.
@@ -1119,7 +1108,7 @@ NumPy سعی می‌کند چندنخی را در بسیاری از کد کام
11191108
n = 20
11201109
m = 1000
11211110
for i in range(n):
1122-
X = np.random.randn(m, m)
1111+
X = rng.standard_normal((m, m))
11231112
λ = np.linalg.eigvals(X)
11241113
```
11251114

@@ -1135,10 +1124,6 @@ for i in range(n):
11351124
این به این دلیل است که روتین `eigvals` NumPy به زیبایی وظایف را تقسیم می‌کند و
11361125
آن‌ها را به نخ‌های مختلف توزیع می‌کند.
11371126

1138-
1139-
1140-
1141-
11421127
## تمرین‌ها
11431128

11441129

@@ -1260,28 +1245,28 @@ def sample(q):
12601245

12611246
```{code-cell} python3
12621247
from numpy import cumsum
1263-
from numpy.random import uniform
12641248
12651249
class DiscreteRV:
12661250
"""
12671251
یک آرایه از نمونه‌ها را از یک متغیر تصادفی گسسته با بردار
12681252
احتمالات داده شده توسط q تولید می‌کند.
12691253
"""
12701254
1271-
def __init__(self, q):
1255+
def __init__(self, q, seed=None):
12721256
"""
12731257
آرگومان q یک آرایه NumPy است، یا شبیه آرایه، غیر منفی و جمع
12741258
به 1 می‌شود
12751259
"""
12761260
self.q = q
12771261
self.Q = cumsum(q)
1262+
self.rng = np.random.default_rng(seed)
12781263
12791264
def draw(self, k=1):
12801265
"""
12811266
k نمونه از q برمی‌گرداند. برای هر چنین نمونه‌ای، مقدار i با
12821267
احتمال q[i] برگردانده می‌شود.
12831268
"""
1284-
return self.Q.searchsorted(uniform(0, 1, size=k))
1269+
return self.Q.searchsorted(self.rng.uniform(0, 1, size=k))
12851270
```
12861271

12871272
منطق واضح نیست، اما اگر وقت خود را بگذارید و آن را به آرامی بخوانید،
@@ -1407,7 +1392,8 @@ class ECDF:
14071392

14081393
```{code-cell} python3
14091394
fig, ax = plt.subplots()
1410-
X = np.random.randn(1000)
1395+
rng = np.random.default_rng()
1396+
X = rng.standard_normal(1000)
14111397
F = ECDF(X)
14121398
F.plot(ax)
14131399
```
@@ -1428,9 +1414,9 @@ F.plot(ax)
14281414

14291415
```{code-cell} python3
14301416
1431-
np.random.seed(123)
1432-
x = np.random.randn(4, 4)
1433-
y = np.random.randn(4)
1417+
rng = np.random.default_rng(123)
1418+
x = rng.standard_normal((4, 4))
1419+
y = rng.standard_normal(4)
14341420
A = x / y
14351421
```
14361422

@@ -1458,9 +1444,9 @@ print(A)
14581444

14591445
```{code-cell} python3
14601446
1461-
np.random.seed(123)
1462-
x = np.random.randn(1000, 100, 100)
1463-
y = np.random.randn(100)
1447+
rng = np.random.default_rng(123)
1448+
x = rng.standard_normal((1000, 100, 100))
1449+
y = rng.standard_normal(100)
14641450
14651451
with qe.Timer("Broadcasting operation"):
14661452
B = x / y
@@ -1486,9 +1472,9 @@ print(B)
14861472
**راه‌حل قسمت 1**
14871473

14881474
```{code-cell} python3
1489-
np.random.seed(123)
1490-
x = np.random.randn(4, 4)
1491-
y = np.random.randn(4)
1475+
rng = np.random.default_rng(123)
1476+
x = rng.standard_normal((4, 4))
1477+
y = rng.standard_normal(4)
14921478
14931479
C = np.empty_like(x)
14941480
n = len(x)
@@ -1517,9 +1503,9 @@ print(np.array_equal(A, C))
15171503

15181504
```{code-cell} python3
15191505
1520-
np.random.seed(123)
1521-
x = np.random.randn(1000, 100, 100)
1522-
y = np.random.randn(100)
1506+
rng = np.random.default_rng(123)
1507+
x = rng.standard_normal((1000, 100, 100))
1508+
y = rng.standard_normal(100)
15231509
15241510
with qe.Timer("For loop operation"):
15251511
D = np.empty_like(x)
@@ -1546,4 +1532,4 @@ print(np.array_equal(B, D))
15461532
```
15471533

15481534
```{solution-end}
1549-
```
1535+
```

0 commit comments

Comments
 (0)