Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .translate/state/numpy.md.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
source-sha: cc9c3256dc35bd277cb25d0089f0a0452c0fa94e
synced-at: "2026-03-20"
model: unknown
mode: RESYNC
source-sha: a2b929f15e703b6942e8b80a29011c51f234b1e0
synced-at: "2026-05-13"
model: claude-sonnet-4-6
mode: UPDATE
section-count: 8
tool-version: 0.13.0
tool-version: 0.15.0
68 changes: 27 additions & 41 deletions lectures/numpy.md
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,6 @@ z

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



### نمایه‌گذاری آرایه

```{index} single: NumPy; Arrays (Indexing)
Expand Down Expand Up @@ -400,7 +398,6 @@ z
z.searchsorted(2.2)
```


## عملیات حسابی

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


## ضرب ماتریسی

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



## قابلیت تغییر و کپی کردن آرایه‌ها

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

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


### قابلیت تغییر

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

```{code-cell} python3
a = np.random.randn(3)
rng = np.random.default_rng()
a = rng.standard_normal(3)
a
```

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

```{code-cell} python3
a = np.random.randn(3)
a = rng.standard_normal(3)
a
```

Expand All @@ -937,14 +931,10 @@ a

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




## ویژگی‌های اضافی

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


### توابع جهانی

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

```{code-cell} python3
x = np.random.randn(4)
x = rng.standard_normal(4)
x
```

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

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


### مقایسه‌ها

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

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

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

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

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


### چندنخی ضمنی

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

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





## تمرین‌ها


Expand Down Expand Up @@ -1260,28 +1245,28 @@ def sample(q):

```{code-cell} python3
from numpy import cumsum
from numpy.random import uniform

class DiscreteRV:
"""
یک آرایه از نمونه‌ها را از یک متغیر تصادفی گسسته با بردار
احتمالات داده شده توسط q تولید می‌کند.
"""

def __init__(self, q):
def __init__(self, q, seed=None):
"""
آرگومان q یک آرایه NumPy است، یا شبیه آرایه، غیر منفی و جمع
به 1 می‌شود
"""
self.q = q
self.Q = cumsum(q)
self.rng = np.random.default_rng(seed)
Comment on lines +1255 to +1262

def draw(self, k=1):
"""
k نمونه از q برمی‌گرداند. برای هر چنین نمونه‌ای، مقدار i با
احتمال q[i] برگردانده می‌شود.
"""
return self.Q.searchsorted(uniform(0, 1, size=k))
return self.Q.searchsorted(self.rng.uniform(0, 1, size=k))
```

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

```{code-cell} python3
fig, ax = plt.subplots()
X = np.random.randn(1000)
rng = np.random.default_rng()
X = rng.standard_normal(1000)
F = ECDF(X)
F.plot(ax)
```
Expand All @@ -1428,9 +1414,9 @@ F.plot(ax)

```{code-cell} python3

np.random.seed(123)
x = np.random.randn(4, 4)
y = np.random.randn(4)
rng = np.random.default_rng(123)
x = rng.standard_normal((4, 4))
y = rng.standard_normal(4)
A = x / y
```

Expand Down Expand Up @@ -1458,9 +1444,9 @@ print(A)

```{code-cell} python3

np.random.seed(123)
x = np.random.randn(1000, 100, 100)
y = np.random.randn(100)
rng = np.random.default_rng(123)
x = rng.standard_normal((1000, 100, 100))
y = rng.standard_normal(100)

with qe.Timer("Broadcasting operation"):
B = x / y
Expand All @@ -1486,9 +1472,9 @@ print(B)
**راه‌حل قسمت 1**

```{code-cell} python3
np.random.seed(123)
x = np.random.randn(4, 4)
y = np.random.randn(4)
rng = np.random.default_rng(123)
x = rng.standard_normal((4, 4))
y = rng.standard_normal(4)

C = np.empty_like(x)
n = len(x)
Expand Down Expand Up @@ -1517,9 +1503,9 @@ print(np.array_equal(A, C))

```{code-cell} python3

np.random.seed(123)
x = np.random.randn(1000, 100, 100)
y = np.random.randn(100)
rng = np.random.default_rng(123)
x = rng.standard_normal((1000, 100, 100))
y = rng.standard_normal(100)

with qe.Timer("For loop operation"):
D = np.empty_like(x)
Expand All @@ -1546,4 +1532,4 @@ print(np.array_equal(B, D))
```

```{solution-end}
```
```
Loading