🔢 مبانی 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])
📌 نکات کلیدی
- ✅
np.array()برای ایجاد آرایه از لیست استفاده میشود. - ✅ توابع
np.zeros()،np.ones()،np.eye()وnp.full()برای ایجاد آرایههای خاص. - ✅ ویژگیهای مهم:
shape،size،ndimوdtype. - ✅ برش (Slicing) مشابه لیستها است، اما با پشتیبانی از ابعاد مختلف.
- ✅ عملیات ریاضی به صورت عنصر به عنصر انجام میشود.
- ✅
reshape()وflatten()برای تغییر شکل آرایه. - ✅ Broadcasting به شما امکان میدهد آرایههای با اندازههای مختلف را با هم جمع کنید.
- ✅
np.randomبرای تولید اعداد تصادفی وnp.linalgبرای عملیات خطی. - ✅ NumPy پایه و اساس Pandas، SciPy و Scikit-learn است.