238238
239239برای خواندن دادههای آرایه از یک فایل متنی حاوی دادههای عددی، از ` np.loadtxt ` استفاده کنید --- برای جزئیات به [ مستندات] ( https://numpy.org/doc/stable/reference/routines.io.html ) مراجعه کنید.
240240
241-
242-
243241### نمایهگذاری آرایه
244242
245243``` {index} single: NumPy; Arrays (Indexing)
400398z.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قبلاً نمونههایی از قابلیت تغییر را در بالا دیدیم.
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)
889883a
890884```
891885
915909این کار میتواند با استفاده از ` np.copy ` انجام شود
916910
917911``` {code-cell} python3
918- a = np.random.randn (3)
912+ a = rng.standard_normal (3)
919913a
920914```
921915
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)
997987x
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]
10701059NumPy برخی از قابلیتهای اضافی مرتبط با برنامهنویسی علمی را
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)
10781068y.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 سعی میکند چندنخی را در بسیاری از کد کام
11191108n = 20
11201109m = 1000
11211110for 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
12621247from numpy import cumsum
1263- from numpy.random import uniform
12641248
12651249class 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
14091394fig, ax = plt.subplots()
1410- X = np.random.randn(1000)
1395+ rng = np.random.default_rng()
1396+ X = rng.standard_normal(1000)
14111397F = ECDF(X)
14121398F.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)
14341420A = 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
14651451with 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
14931479C = np.empty_like(x)
14941480n = 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
15241510with 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