آموزش Numpy: بخش دوم

آموزش Numpy: بخش دوم

numpy2
آموزش پیشرفته پایتون

آموزش Numpy: بخش دوم

import numpy as np

# ساخت ماتریس ۲ سطر و ۳ ستون پر از صفر (با نوع داده اعشاری پیش‌فرض)
zeros_matrix = np.zeros((2, 3))
print("ماتریس صفر:\n", zeros_matrix)
# ساخت بردار ۴ عضوی از عدد یک با نوع داده صحیح (int)
ones_arr = np.ones(4, dtype=int)

print(ones_arr)
# خروجی: [1 1 1 1]
# ساخت ماتریس ۲x۲ پر از عدد ۷
full_matrix = np.full((2, 2), 7)
print("\nماتریس پر شده با ۷:\n", full_matrix)

# مقداردهی مجدد تمام عناصر یک آرایه موجود با تابع fill
arr = np.array([10, 20, 30])
arr.fill(100)
print("\nآرایه پس از اجرای fill:", arr)
# تولید اعداد صحیح از ۱ تا ۱۰ با گام ۲
seq_int = np.arange(1, 10, 2)
print(seq_int)
# خروجی: [1 3 5 7 9]

# تولید اعداد اعشاری از ۰ تا ۱ با گام ۰.۲
seq_float = np.arange(0, 1, 0.2)
print(seq_float)
# خروجی: [0.  0.2 0.4 0.6 0.8]
# تولید ۵ نقطه با فاصله کاملاً برابر بین ۰ تا ۱۰۰
points = np.linspace(0, 100, 5)

print(points)
# خروجی: [  0.  25.  50.  75. 100.]
# تعیین عدد هسته
np.random.seed(42)

# اجرای اول
print("تولید تصادفی:", np.random.rand(3))

# اگر دوباره seed را 42 بگذاریم، خروجی دقیقاً همان قبلی خواهد بود
np.random.seed(42)
print("تکرار مجدد:", np.random.rand(3))
# تولید ماتریس ۲ سطر و ۳ ستون از اعداد اعشاری بین ۰ و ۱
rand_uniform = np.random.rand(2, 3)

print("ماتریس تصادفی یکنواخت:")
print(rand_uniform)
# تولید ماتریس ۲ در ۲ با توزیع نرمال استاندارد (میانگین ۰ و واریانس ۱)
rand_normal = np.random.randn(2, 2)

print("ماتریس تصادفی توزیع نرمال:")
print(rand_normal)
# تولید بردار ۵ عضوی از اعداد صحیح تصادفی بین ۱۰ تا ۵۰ (خود ۵۰ تولید نمی‌شود)
rand_ints = np.random.randint(10, 50, size=5)

print("اعداد صحیح تصادفی:")
print(rand_ints)

matrix = np.array([[10, 20, 30],
                   [40, 50, 60]])

# عدد ۵ به تمام درایه‌ها اضافه می‌شود
result = matrix + 5

print("جمع ماتریس با یک عدد:")
print(result)
A = np.array([[1, 2, 3],
              [4, 5, 6]])

B = np.array([10, 20, 30])

# بردار B به تک‌تک سطرهای A اضافه می‌شود
result = A + B

print("نتیجه انتشار بردار سطری روی ماتریس:")
print(result)
# خروجی:
# [[11 22 33]
#  [14 25 36]]
col_vector = np.array([[1], 
                       [2], 
                       [3]])  # شکل: (3, 1)

row_vector = np.array([10, 20, 30]) # شکل: (1, 3)

result = col_vector + row_vector

print("نتیجه جمع بردار ستونی و سطری:")
print(result)
# خروجی یک ماتریس 3x3:
# [[11 21 31]
#  [12 22 32]
#  [13 23 33]]
matrix = np.array([[1, 2, 3],
                   [4, 5, 6]])  # ابعاد: (2, 3)

vector = np.array([10, 20])     # ابعاد: (2,)

# خط زیر اجرا نمی‌شود و خطا خواهد داد:
# invalid_sum = matrix + vector 
# ValueError: operands could not be broadcast together with shapes (2,3) (2,)
a = np.array([10, 20, 30, 40])
b = np.array([1, 2, 3, 4])

# محاسبات حسابی با اپراتورها (Element-wise)
print("جمع دو آرایه:", a + b)
print("تفریق دو آرایه:", a - b)
print("ضرب عنصر به عنصر:", a * b)
print("تقسیم دو آرایه:", a / b)
print("توان رساندن:", b ** 2)

# محاسبات با توابع معادل (ufuncs)
add_result = np.add(a, b)
mod_result = np.mod(a, 3)

print("نتیجه np.add:", add_result)
print("باقی‌مانده تقسیم بر ۳:", mod_result)
x = np.array([1.0, 10.0, 100.0])

# محاسبه لگاریتم طبیعی، لگاریتم بر پایه ۱۰ و تابع نمایی
log_natural = np.log(x)
log_base10 = np.log10(x)
exp_val = np.exp(np.array([1, 2]))

print("لگاریتم طبیعی (ln):", log_natural)
print("لگاریتم پایه ۱۰:", log_base10)
print("تابع نمایی (e^x):", exp_val)
data = np.random.randint(1, 100, size=(3, 4))
print("داده‌ها:\n", data)

print("انحراف معیار کل:", np.std(data))
print("واریانس کل:", np.var(data))
print("میانه (Median):", np.median(data))

# محاسبه میانگین هر ستون (axis=0)
print("میانگین ستون‌ها:", np.mean(data, axis=0))

# پیدا کردن اندیس بزرگ‌ترین عنصر (Argmax)
print("اندیس بزرگ‌ترین عنصر در کل آرایه:", np.argmax(data))

data = np.array([[10, 20, 30],
                 [40, 50, 60]])

print("مجموع کل عناصر:", np.sum(data))
print("میانگین کل عناصر:", np.mean(data))

# محاسبه میانگین در راستای ستون‌ها (عمودی)
mean_per_column = np.mean(data, axis=0)
print("میانگین هر ستون (axis=0):", mean_per_column)

# محاسبه مجموع در راستای سطرها (افقی)
sum_per_row = np.sum(data, axis=1)
print("مجموع هر سطر (axis=1):", sum_per_row)

arr = np.arange(1, 7).reshape(2, 3)
print("ماتریس اولیه (2x3):\n", arr)

# ترانهاده (تبدیل به 3x2)
print("ترانهاده (3x2):\n", arr.T)
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# ضرب جبر خطی ماتریس‌ها
dot_product = A @ B
print("ضرب ماتریسی (Dot Product):\n", dot_product)
# خروجی:
# [[19 22]
#  [43 50]]
# تعریف دو ماتریس مربع ۲x۲
A = np.array([[2, 1],
              [5, 3]])

B = np.array([[1, 4],
              [2, 0]])


# ۳. محاسبه دترمینان ماتریس A
determinant = np.linalg.det(A)
print("\nدترمینان ماتریس A:", determinant)

# ۴. محاسبه معکوس ماتریس A
inverse_A = np.linalg.inv(A)
print("\nمعکوس ماتریس A:\n", inverse_A)

Vectorization (بردارسازی): یعنی «چگونه کد اجرا می‌شود» (حذف حلقه‌های کُند پایتون و بردن محاسبات به دل پردازنده با زبان C).

Broadcasting (پخش/انتشار): یعنی «چگونه ابعاد نامتناسب با هم جور می‌شوند» (کش آوردن ابعاد کوچک‌تر بدون کپی در حافظه تا بشه رویشان محاسبه کرد).

فکر خود را اینجا بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *