🐍 کتابخانه مرجع پایتون

🔢 مبانی NumPy

NumPy (Numerical Python) یکی از مهم‌ترین کتابخانه‌های پایتون برای محاسبات عددی و تحلیل داده است. NumPy آرایه‌های چندبعدی (ndarray) با عملکرد بالا و توابع ریاضی فراوانی را ارائه می‌دهد که پایه و اساس بسیاری از کتابخانه‌های دیگر مانند Pandas، SciPy و Scikit-learn است.

🔹 نصب و import

# نصب (در محیط واقعی)
# pip install numpy

# import کردن
import numpy as np

# بررسی نسخه
print(np.__version__)

🔹 ایجاد آرایه با np.array()

import numpy as np

# از لیست
arr1 = np.array([1, 2, 3, 4, 5])
print("1D array:", arr1)

# از لیست تو در تو (2D)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("\n2D array:")
print(arr2)

# مشخص کردن نوع داده
arr3 = np.array([1, 2, 3], dtype=np.float32)
print("\nFloat array:", arr3)

🔹 توابع ایجاد آرایه

import numpy as np

# np.zeros: آرایه صفر
zeros = np.zeros((3, 4))
print("zeros:\n", zeros)

# np.ones: آرایه یک
ones = np.ones((2, 3))
print("\nones:\n", ones)

# np.full: آرایه با مقدار ثابت
full = np.full((3, 3), 7)
print("\nfull:\n", full)

# np.eye: ماتریس همانی
eye = np.eye(4)
print("\neye:\n", eye)

# np.arange: مشابه range
arange = np.arange(0, 10, 2)
print("\narange:", arange)

# np.linspace: نقاط با فاصله مساوی
linspace = np.linspace(0, 1, 5)
print("\nlinspace:", linspace)

🔹 ویژگی‌های آرایه

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

print("Array:")
print(arr)
print(f"Shape: {arr.shape}")          # ابعاد
print(f"Size: {arr.size}")            # تعداد عناصر
print(f"Dimensions: {arr.ndim}")      # تعداد ابعاد
print(f"Data type: {arr.dtype}")      # نوع داده
print(f"Item size: {arr.itemsize}")   # حجم هر عنصر (بایت)

🔹 دسترسی و برش (Slicing)

import numpy as np

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

print("Original array:")
print(arr)

# دسترسی به عنصر
print(f"\narr[1, 2] = {arr[1, 2]}")  # 7

# برش سطر
print("\nFirst row:", arr[0, :])

# برش ستون
print("First column:", arr[:, 0])

# برش زیرماتریس
print("\nSubmatrix (rows 1-2, cols 1-3):")
print(arr[1:3, 1:4])

🔹 عملیات ریاضی

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# عملیات پایه
print("Original:", arr)
print("arr + 10:", arr + 10)
print("arr * 2:", arr * 2)
print("arr ** 2:", arr ** 2)

# توابع ریاضی
print("\nSquare root:", np.sqrt(arr))
print("Exponential:", np.exp(arr))
print("Sine:", np.sin(arr))

# آمار
print(f"\nSum: {np.sum(arr)}")
print(f"Mean: {np.mean(arr)}")
print(f"Std: {np.std(arr)}")
print(f"Min: {np.min(arr)}")
print(f"Max: {np.max(arr)}")

🔹 عملیات روی ماتریس‌ها

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

print("Matrix A:")
print(A)
print("\nMatrix B:")
print(B)

# جمع ماتریس‌ها
print("\nA + B:")
print(A + B)

# ضرب ماتریس‌ها (عنصر به عنصر)
print("\nA * B (element-wise):")
print(A * B)

# ضرب ماتریس (dot product)
print("\nA @ B (matrix multiplication):")
print(A @ B)

# ترانهاده
print("\nTranspose of A:")
print(A.T)

# دترمینان
print(f"\nDeterminant of A: {np.linalg.det(A):.2f}")

# معکوس ماتریس
print("\nInverse of A:")
print(np.linalg.inv(A))

🔹 تغییر شکل آرایه (reshape و flatten)

import numpy as np

arr = np.arange(12)
print("Original:", arr)

# reshape به 3x4
reshaped = arr.reshape(3, 4)
print("\nReshaped (3x4):")
print(reshaped)

# flatten (تبدیل به 1D)
flattened = reshaped.flatten()
print("\nFlattened:", flattened)

# ravel (مشابه flatten)
raveled = reshaped.ravel()
print("Raveled:", raveled)

🔹 Broadcasting (پخش)

NumPy به طور خودکار آرایه‌ها را برای عملیات با اندازه‌های مختلف تطبیق می‌دهد.

import numpy as np

# افزودن عدد به آرایه
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("Original:")
print(arr)

# افزودن عدد
print("\narr + 10:")
print(arr + 10)

# افزودن سطر
row = np.array([10, 20, 30])
print("\nRow addition:")
print(arr + row)

# افزودن ستون
col = np.array([[10], [20]])
print("\nColumn addition:")
print(arr + col)

🔹 شرط‌گذاری و فیلتر

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# شرط
print("arr > 5:", arr > 5)

# فیلتر کردن
filtered = arr[arr > 5]
print("\nElements > 5:", filtered)

# شرط چندگانه
filtered2 = arr[(arr > 3) & (arr < 8)]
print("\nElements > 3 and < 8:", filtered2)

# where: جایگزینی شرطی
result = np.where(arr > 5, "High", "Low")
print("\nwhere (High/Low):", result)

🔹 توابع آماری

import numpy as np

# داده‌های تصادفی
data = np.random.randn(1000)  # 1000 عدد با توزیع نرمال

print(f"Mean: {np.mean(data):.4f}")
print(f"Median: {np.median(data):.4f}")
print(f"Std: {np.std(data):.4f}")
print(f"Min: {np.min(data):.4f}")
print(f"Max: {np.max(data):.4f}")

# صدک‌ها
print(f"25th percentile: {np.percentile(data, 25):.4f}")
print(f"75th percentile: {np.percentile(data, 75):.4f}")

# همبستگی
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])
print(f"\nCorrelation between x and y: {np.corrcoef(x, y)[0, 1]:.4f}")

🔹 تولید اعداد تصادفی با np.random

import numpy as np

# اعداد تصادفی یکنواخت [0, 1)
uniform = np.random.rand(5)
print("Uniform [0, 1):", uniform)

# اعداد تصادفی با توزیع نرمال
normal = np.random.randn(5)
print("\nNormal (standard):", normal)

# اعداد صحیح تصادفی
integers = np.random.randint(0, 10, size=(3, 4))
print("\nRandom integers (0-9):")
print(integers)

# تنظیم seed برای تکرارپذیری
np.random.seed(42)
print("\nWith seed 42:", np.random.rand(5))

# انتخاب تصادفی از آرایه
arr = np.array([10, 20, 30, 40, 50])
choice = np.random.choice(arr, size=3, replace=False)
print("\nRandom choice from array:", choice)

# تنظیم مجدد seed
np.random.seed(None)

🔹 ذخیره و بارگذاری آرایه

import numpy as np

# ایجاد آرایه
arr = np.array([1, 2, 3, 4, 5])

# ذخیره در فایل .npy
np.save("my_array.npy", arr)
print("Array saved to my_array.npy")

# بارگذاری
loaded = np.load("my_array.npy")
print("Loaded array:", loaded)

# ذخیره چند آرایه در یک فایل
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
np.savez("multiple.npz", a=arr1, b=arr2)

# بارگذاری
data = np.load("multiple.npz")
print("\nLoaded from npz:")
print("a:", data["a"])
print("b:", data["b"])

🔹 مثال جامع: تحلیل داده با NumPy

import numpy as np

# تولید داده‌های فروش (100 روز، 5 محصول)
np.random.seed(42)
sales = np.random.randint(50, 200, size=(100, 5))
products = ["Product A", "Product B", "Product C", "Product D", "Product E"]

print("Sales data shape:", sales.shape)
print("\nFirst 5 days:")
print(sales[:5])

# ۱. مجموع فروش هر محصول
total_sales = np.sum(sales, axis=0)
print("\nTotal sales per product:")
for i, name in enumerate(products):
    print(f"  {name}: {total_sales[i]}")

# ۲. میانگین فروش روزانه
daily_avg = np.mean(sales, axis=0)
print("\nDaily average per product:")
for i, name in enumerate(products):
    print(f"  {name}: {daily_avg[i]:.2f}")

# ۳. بهترین و بدترین روزها
daily_total = np.sum(sales, axis=1)
best_day = np.argmax(daily_total)
worst_day = np.argmin(daily_total)
print(f"\nBest day: Day {best_day+1} with {daily_total[best_day]} sales")
print(f"Worst day: Day {worst_day+1} with {daily_total[worst_day]} sales")

# ۴. محصولات با فروش بالای ۱۰۰۰۰
high_sellers = total_sales > 10000
print("\nProducts with total sales > 10000:")
for i, name in enumerate(products):
    if high_sellers[i]:
        print(f"  {name}: {total_sales[i]}")

# ۵. ماتریس همبستگی
correlation = np.corrcoef(sales.T)
print("\nCorrelation matrix:")
print(correlation)

# ۶. نرمال‌سازی داده‌ها
normalized = (sales - np.mean(sales, axis=0)) / np.std(sales, axis=0)
print("\nNormalized data (first 5 days):")
print(normalized[:5])

📌 نکات کلیدی

← قبلی: کار با CSV → بعدی: مبانی Pandas ↑ بازگشت به فهرست متوسط