NumPy
NumPy : مقدمهای برای محاسبات عددی در پایتون
NumPy (مخفف Numerical Python) یکی از مهمترین و پرکاربردترین کتابخانههای پایتون برای محاسبات عددی و علمی است. این کتابخانه ابزارهای قدرتمندی را برای کار با آرایهها (arrays)، ماتریسها و توابع ریاضی فراهم میکند که در حوزههایی مانند علم داده، یادگیری ماشین، مهندسی و آمار کاربرد فراوانی دارند. در این مقاله، به معرفی مفاهیم پایه و کاربردهای اصلی NumPy برای مبتدیان خواهیم پرداخت.
چرا NumPy؟
قبل از NumPy، انجام محاسبات عددی در پایتون با استفاده از لیستها (lists) انجام میشد. اما لیستها برای این کار کارایی لازم را نداشتند، زیرا:
- **سرعت پایین:** عملیات روی لیستها به دلیل ماهیت پویا و نوعدهی دینامیک (dynamic typing) پایتون، کندتر از عملیات روی آرایههای NumPy هستند.
- **مصرف حافظه بالا:** لیستها فضای حافظه بیشتری را نسبت به آرایههای NumPy اشغال میکنند.
- **عدم وجود توابع ریاضی بهینه:** لیستها توابع ریاضی بهینهشده برای عملیات روی آرایهها را ندارند.
NumPy این مشکلات را با ارائه آرایههای چندبعدی و توابع ریاضی بهینه رفع میکند. آرایههای NumPy از نوع داده یکسان تشکیل شدهاند که باعث افزایش سرعت و کاهش مصرف حافظه میشود.
نصب NumPy
برای نصب NumPy میتوانید از مدیر بسته pip استفاده کنید:
```bash pip install numpy ```
پس از نصب، میتوانید NumPy را در کد پایتون خود با استفاده از دستور `import numpy as np` وارد کنید. `np` یک نام مستعار (alias) رایج برای NumPy است که استفاده از آن را آسانتر میکند.
آرایهها (Arrays)
آرایهها (arrays) ساختار داده اصلی در NumPy هستند. آرایه NumPy یک جدول چندبعدی از عناصر با نوع داده یکسان است.
ایجاد آرایهها
آرایهها را میتوان به روشهای مختلفی ایجاد کرد:
- **از لیست پایتون:**
```python import numpy as np
my_list = [1, 2, 3, 4, 5] my_array = np.array(my_list) print(my_array) # خروجی: [1 2 3 4 5] ```
- **با استفاده از توابع NumPy:**
* `np.zeros(shape)`: یک آرایه با مقادیر صفر ایجاد میکند. `shape` ابعاد آرایه را مشخص میکند. * `np.ones(shape)`: یک آرایه با مقادیر یک ایجاد میکند. `shape` ابعاد آرایه را مشخص میکند. * `np.arange(start, stop, step)`: یک آرایه با مقادیر در یک بازه مشخص ایجاد میکند. `start` مقدار شروع، `stop` مقدار پایان (غیرشامل) و `step` گام (increment) است. * `np.linspace(start, stop, num)`: یک آرایه با `num` مقدار در یک بازه مشخص ایجاد میکند. `start` مقدار شروع، `stop` مقدار پایان (شامل) و `num` تعداد مقادیر است. * `np.random.rand(shape)`: یک آرایه با مقادیر تصادفی بین 0 و 1 ایجاد میکند. `shape` ابعاد آرایه را مشخص میکند.
```python import numpy as np
zero_array = np.zeros((2, 3)) # آرایه 2x3 با مقادیر صفر print(zero_array)
one_array = np.ones((3, 2)) # آرایه 3x2 با مقادیر یک print(one_array)
range_array = np.arange(0, 10, 2) # آرایه با مقادیر 0، 2، 4، 6، 8 print(range_array)
linspace_array = np.linspace(0, 1, 5) # آرایه با 5 مقدار بین 0 و 1 print(linspace_array)
random_array = np.random.rand(2, 2) # آرایه 2x2 با مقادیر تصادفی print(random_array) ```
ویژگیهای آرایهها
- **`shape`:** ابعاد آرایه را برمیگرداند.
- **`dtype`:** نوع داده عناصر آرایه را برمیگرداند.
- **`ndim`:** تعداد ابعاد آرایه را برمیگرداند.
- **`size`:** تعداد کل عناصر آرایه را برمیگرداند.
```python import numpy as np
my_array = np.array([[1, 2, 3], [4, 5, 6]])
print(my_array.shape) # خروجی: (2, 3) print(my_array.dtype) # خروجی: int64 (یا نوع داده مشابه) print(my_array.ndim) # خروجی: 2 print(my_array.size) # خروجی: 6 ```
دسترسی به عناصر آرایه
به عناصر آرایه میتوان با استفاده از اندیس (index) دسترسی پیدا کرد. اندیسگذاری در NumPy از صفر شروع میشود.
```python import numpy as np
my_array = np.array([[1, 2, 3], [4, 5, 6]])
print(my_array[0, 0]) # خروجی: 1 (عنصر سطر اول، ستون اول) print(my_array[1, 2]) # خروجی: 6 (عنصر سطر دوم، ستون سوم) print(my_array[:, 0]) # خروجی: [1 4] (تمام عناصر ستون اول) print(my_array[0, :]) # خروجی: [1 2 3] (تمام عناصر سطر اول) ```
برش (Slicing)
برش (slicing) به شما امکان میدهد بخشی از آرایه را انتخاب کنید.
```python import numpy as np
my_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(my_array[2:5]) # خروجی: [2 3 4] (عناصر از اندیس 2 تا 4) print(my_array[:3]) # خروجی: [0 1 2] (عناصر از ابتدا تا اندیس 2) print(my_array[5:]) # خروجی: [5 6 7 8 9] (عناصر از اندیس 5 تا انتها) print(my_array[::2]) # خروجی: [0 2 4 6 8] (عناصر با گام 2) ```
عملیات ریاضی روی آرایهها
NumPy توابع ریاضی متنوعی را برای انجام عملیات روی آرایهها فراهم میکند.
عملیات عنصری (Element-wise Operations)
عملیات عنصری به این معنی است که عملیات روی هر عنصر آرایه به صورت جداگانه انجام میشود.
```python import numpy as np
a = np.array([1, 2, 3]) b = np.array([4, 5, 6])
print(a + b) # خروجی: [5 7 9] print(a - b) # خروجی: [-3 -3 -3] print(a * b) # خروجی: [ 4 10 18] print(a / b) # خروجی: [0.25 0.4 0.5 ] print(a ** 2) # خروجی: [1 4 9] ```
توابع جهانی (Universal Functions - ufuncs)
توابع جهانی توابعی هستند که روی آرایهها به صورت عنصری عمل میکنند. NumPy توابع جهانی متنوعی را برای انجام عملیات ریاضی، مثلثاتی، نمایی و لگاریتمی فراهم میکند.
```python import numpy as np
a = np.array([1, 2, 3])
print(np.sin(a)) print(np.exp(a)) print(np.log(a)) print(np.sqrt(a)) ```
عملیات ماتریسی
NumPy توابعی را برای انجام عملیات ماتریسی مانند ضرب ماتریسی، ترانهاده و معکوس فراهم میکند.
- **`np.dot(a, b)`:** ضرب ماتریسی دو آرایه را انجام میدهد.
- **`np.transpose(a)`:** ترانهاده یک آرایه را محاسبه میکند.
- **`np.linalg.inv(a)`:** معکوس یک ماتریس را محاسبه میکند.
```python import numpy as np
a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]])
print(np.dot(a, b)) # ضرب ماتریسی print(np.transpose(a)) # ترانهاده print(np.linalg.inv(a)) # معکوس ```
تغییر شکل آرایهها (Reshaping Arrays)
تغییر شکل آرایهها به شما امکان میدهد ابعاد آرایه را تغییر دهید بدون اینکه دادهها را تغییر دهید.
```python import numpy as np
my_array = np.arange(12) print(my_array) # خروجی: [ 0 1 2 3 4 5 6 7 8 9 10 11]
reshaped_array = my_array.reshape(3, 4) # تغییر شکل به آرایه 3x4 print(reshaped_array) ```
ترکیب آرایهها (Combining Arrays)
NumPy توابعی را برای ترکیب آرایهها فراهم میکند.
- **`np.concatenate((a, b), axis)`:** آرایهها را در امتداد یک محور مشخص (axis) ترکیب میکند.
- **`np.vstack((a, b))`:** آرایهها را به صورت عمودی (vertical) ترکیب میکند.
- **`np.hstack((a, b))`:** آرایهها را به صورت افقی (horizontal) ترکیب میکند.
```python import numpy as np
a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]])
print(np.concatenate((a, b), axis=0)) # ترکیب عمودی print(np.concatenate((a, b), axis=1)) # ترکیب افقی print(np.vstack((a, b))) # ترکیب عمودی print(np.hstack((a, b))) # ترکیب افقی ```
Broadcasting
Broadcasting یک مکانیسم قدرتمند در NumPy است که به شما امکان میدهد عملیات را روی آرایههایی با شکلهای مختلف انجام دهید. NumPy به طور خودکار آرایههای کوچکتر را گسترش میدهد تا با آرایه بزرگتر مطابقت داشته باشند.
```python import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30])
print(a + b) # Broadcasting ```
کاربردهای NumPy
NumPy کاربردهای فراوانی در حوزههای مختلف دارد:
- **علم داده:** برای تحلیل دادهها، تمیز کردن دادهها و آمادهسازی دادهها برای مدلهای یادگیری ماشین.
- **یادگیری ماشین:** برای پیادهسازی الگوریتمهای یادگیری ماشین و کار با دادههای بزرگ.
- **مهندسی:** برای شبیهسازی سیستمها، پردازش سیگنال و تصویر و تحلیل دادههای مهندسی.
- **آمار:** برای انجام محاسبات آماری و تحلیل دادهها.
- **تحلیل مالی:** برای مدلسازی مالی، تحلیل ریسک و بهینهسازی پرتفوی.
* تحلیل تکنیکال * مدیریت ریسک * استراتژیهای معاملاتی * تحلیل حجم معاملات * بازارهای مالی * مدلسازی مالی * بهینهسازی پرتفوی * نوسانگیری * معاملهگری الگوریتمی * شاخصهای مالی * تحلیل بنیادی * مدیریت سرمایه * پیشبینی روند * الگوهای نموداری * اندیکاتورهای تکنیکال
نتیجهگیری
NumPy یک کتابخانه قدرتمند و ضروری برای هر کسی است که با محاسبات عددی در پایتون سروکار دارد. با یادگیری مفاهیم پایه NumPy، میتوانید به طور موثرتری با دادهها کار کنید و الگوریتمهای پیچیدهتری را پیادهسازی کنید. این مقاله تنها یک مقدمه بود و NumPy امکانات بسیار بیشتری را ارائه میدهد. برای یادگیری بیشتر، میتوانید به مستندات رسمی NumPy مراجعه کنید: مستندات NumPy و آموزشهای آنلاین موجود.
شروع معاملات الآن
ثبتنام در IQ Option (حداقل واریز $10) باز کردن حساب در Pocket Option (حداقل واریز $5)
به جامعه ما بپیوندید
در کانال تلگرام ما عضو شوید @strategybin و دسترسی پیدا کنید به: ✓ سیگنالهای معاملاتی روزانه ✓ تحلیلهای استراتژیک انحصاری ✓ هشدارهای مربوط به روند بازار ✓ مواد آموزشی برای مبتدیان