فهرست سرفصل‌های NumPy
خانه (HOME) مقدمه (Intro) شروع کار (Getting Started) ساخت آرایه ها (Creating Arrays) ایندکس گذاری آرایه (Array Indexing) برش آرایه (Array Slicing) انواع داده (Data Types) کپی در برابر View (Copy vs View) شکل آرایه (Array Shape) تغییر شکل آرایه (Array Reshape) حلقه روی آرایه (Array Iterating) ترکیب آرایه ها (Array Join) تقسیم آرایه ها (Array Split) جستجو در آرایه (Array Search) مرتب سازی آرایه (Array Sort) فیلتر کردن آرایه (Array Filter) مقدمه تصادفی سازی (Random Intro) توزیع داده (Data Distribution) جابه جایی تصادفی (Random Permutation) ماژول Seaborn (Seaborn Module) توزیع نرمال (Normal Distribution) توزیع دوجمله ای (Binomial Distribution) توزیع پواسون (Poisson Distribution) توزیع یکنواخت (Uniform Distribution) توزیع لجستیک (Logistic Distribution) توزیع چندجمله ای (Multinomial Distribution) توزیع نمایی (Exponential Distribution) توزیع کای دو (Chi Square Distribution) توزیع ریلی (Rayleigh Distribution) توزیع پارتو (Pareto Distribution) توزیع زیف (Zipf Distribution) مقدمه ufunc (ufunc Intro) ساخت تابع ufunc (ufunc Create Function) حساب ساده با ufunc (ufunc Simple Arithmetic) گرد کردن اعشار با ufunc (ufunc Rounding Decimals) لگاریتم ها با ufunc (ufunc Logs) جمع ها با ufunc (ufunc Summations) حاصل ضرب ها با ufunc (ufunc Products) تفاضل ها با ufunc (ufunc Differences) کمترین مضرب مشترک با ufunc (ufunc Finding LCM) بزرگترین مقسوم علیه مشترک با ufunc (ufunc Finding GCD) توابع مثلثاتی با ufunc (ufunc Trigonometric) توابع هذلولوی با ufunc (ufunc Hyperbolic) عملیات مجموعه ای با ufunc (ufunc Set Operations) ویرایشگر (Editor) آزمون (Quiz) تمارین (Exercises) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
NumPy

NumPy — مقدمه ufunc (ufunc Intro)

آخرین بروزرسانی: 1404/08/25

مقدمه ufunc (ufunc Intro)

اینجا قراره خیلی ساده با ufunc در NumPy آشنا شوی. ufunc یعنی «تابع عمومی» که روی آرایه های NumPy یا همان ndarray اجرا می شود و حساب و کتاب ها را خیلی تندتر می کند.

ufunc در NumPy دقیقا چیست؟

در منبع گفته شده ufunc مخفف Universal Functions است. یعنی توابعی که روی شیء ndarray کار می کنند و برای محاسبات عددی طراحی شده اند.

وقتی از ufunc در NumPy استفاده می کنی، دیگر لازم نیست روی تک تک عنصرها حلقه بزنی. خود تابع یک جا روی کل آرایه کار می کند.

بیشتر توابع ریاضی NumPy در حقیقت همین ufunc ها هستند. برای همین یاد گرفتن مقدمه ufunc در NumPy بعدا کار با کل کتابخانه را راحت تر می کند.

چرا از ufunc در NumPy استفاده کنیم؟

در متن منبع گفته شده ufunc ها برای پیاده سازی vectorization استفاده می شوند. وکتورایزیشن یعنی به جای حلقه، یک عمل را روی کل آرایه اجرا کنیم.

پردازنده های امروزی برای این مدل کار خیلی بهینه شده اند. بنابراین، وقتی از ufunc در NumPy استفاده می کنی، کد معمولاً خیلی سریع تر از حلقه ساده پایتونی می شود.

منبع همچنین می گوید ufunc ها قابلیت broadcasting و متدهای اضافی مثل reduce و accumulate را دارند. یعنی کار با شکل های مختلف آرایه و جمع تجمعی و این چیزها ساده تر می شود.

طبق متن، ufunc ها چند آرگومان اضافی مهم هم می گیرند:

  • where: آرایه بولی یا شرط که مشخص می کند عملیات کجا اجرا شود.
  • dtype: نوع داده خروجی را تعیین می کند.
  • out: آرایه خروجی که نتیجه در آن کپی می شود.

برای ادامه مسیر می توانی بعد از این مقدمه ufunc در NumPy، صفحه ساخت ufunc سفارشی را هم ببینی که در آموزش بعدی می آید.

وکتورایزیشن (Vectorization) یعنی چه؟

در منبع نوشته شده تبدیل حلقه های تکراری به عملیات برداری را وکتورایزیشن می گویند. یعنی به جای این که خودت روی هر عنصر بچرخی، یک دستور روی کل آرایه اجرا می کنی.

این کار سریع تر است چون CPU برای چنین عملیات برداری طراحی شده است. در نتیجه ufunc در NumPy از همین ویژگی استفاده می کند تا کد کند پر از حلقه را به کد سریع تبدیل کند.

جمع دو لیست بدون استفاده از ufunc

در مثال منبع، قرار است عناصر دو لیست را با هم جمع کنیم. لیست ها این هستند:

  • لیست 1: [1, 2, 3, 4]
  • لیست 2: [4, 5, 6, 7]

یک راه ساده این است که روی هر دو لیست حلقه بزنیم و عنصرهای هم مکان را جمع کنیم. منبع می گوید می توانیم از تابع داخلی zip() پایتون برای جفت کردن عنصرها استفاده کنیم.

x = [1, 2, 3, 4]
y = [4, 5, 6, 7]
z = []

for i, j in zip(x, y):
  z.append(i + j)

print(z)

مشاهده در ادیتور

نکته: این روش جواب می دهد، اما پر از حلقه است. برای آرایه های بزرگ، چنین کدی کند می شود و خواندنش هم سخت تر است.

جمع دو لیست با ufunc در NumPy

در ادامه منبع می گوید NumPy یک ufunc به نام add(x, y) دارد. این تابع همان کار جمع را انجام می دهد، اما به صورت وکتورایز شده.

در مثال زیر، همان دو لیست قبلی را می گیریم و با np.add() جمع می کنیم. این همان ufunc در NumPy برای جمع است.

import numpy as np

x = [1, 2, 3, 4]
y = [4, 5, 6, 7]

z = np.add(x, y)

print(z)

مشاهده در ادیتور

نکته: این بار خبری از حلقه در کد ما نیست. ufunc در NumPy خودش روی تمام عناصر کار می کند و یک آرایه جدید از جمع ها برمی گرداند.

نکته: همین الگو بعداً برای ضرب، تفریق و توابع ریاضی دیگر هم استفاده می شود. کافی است ufunc مناسب را از NumPy صدا بزنی.

جمع بندی سریع مقدمه ufunc

اگر این صفحه را بعداً برای مرور می خوانی، چند نکته کلیدی درباره مقدمه ufunc در NumPy این ها هستند:

  • ufunc در NumPy همان توابع عمومی روی آرایه های ndarray هستند.
  • ufunc ها وکتورایزیشن را پیاده می کنند و معمولاً از حلقه سریع ترند.
  • آرگومان های اضافی مثل where، dtype و out کنترل بیشتری می دهند.
  • مثال ساده جمع دو لیست با np.add() اولین قدم خوب برای فهم ufunc است.
  • بعد از این مقدمه می توانی به سراغ ساخت ufunc سفارشی در ادامه آموزش بروی.