فهرست سرفصل‌های 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 Create Function)

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

ساخت تابع ufunc (ufunc Create Function)

در این صفحه با ساخت تابع ufunc در NumPy آشنا می شوی. یعنی خودت یک تابع معمولی پایتونی می نویسی و بعد با کمک frompyfunc() آن را تبدیل به ufunc مخصوص آرایه های NumPy می کنی.

چطور تابع خودمان را به ufunc تبدیل کنیم؟

در منبع گفته شده برای ساخت تابع ufunc در NumPy، اول یک تابع معمولی تعریف می کنی. بعد با متد frompyfunc() آن را به کتابخانه ufunc ها اضافه می کنی.

متد frompyfunc() سه آرگومان می گیرد که منبع دقیقاً این طور گفته است:

  1. function: نام تابع معمولی که قبلاً تعریف کردی.
  2. inputs: تعداد ورودی ها (مثلاً چند آرایه می گیرد).
  3. outputs: تعداد خروجی ها (چند آرایه برمی گرداند).

نکته: شبیه این است که یک معلم خصوصی بنویسی و بعد به NumPy بگویی: «این هم معلم جدید من، با این تعداد ورودی و خروجی!».

مراحل ساخت تابع ufunc در NumPy

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

  1. یک تابع معمولی پایتون مثل myadd تعریف کن.
  2. با np.frompyfunc(myadd, تعداد_ورودی، تعداد_خروجی) آن را تبدیل کن.
  3. این ufunc جدید را روی لیست ها و آرایه ها صدا بزن.

حالا مثال منبع را با همین ایده می بینیم.

مثال: ساخت ufunc برای جمع کردن

در مثال منبع، یک تابع ساده برای جمع دو عدد ساخته شده است. سپس با frompyfunc() آن را به یک تابع ufunc تبدیل می کنند که می تواند روی لیست ها کار کند.

import numpy as np

def myadd(x, y):
  return x + y

myadd = np.frompyfunc(myadd, 2, 1)

print(myadd([1, 2, 3, 4], [5, 6, 7, 8]))

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

نکته: بعد از تبدیل، نام myadd دیگر یک تابع معمولی نیست، بلکه یک ufunc است که روی هر عنصر دو لیست به صورت برداری جمع را انجام می دهد.

چطور بفهمیم یک تابع ufunc است؟

در منبع گفته شده می توانی با تابع type() بررسی کنی که یک تابع، ufunc هست یا نه. اگر نتیجه <class 'numpy.ufunc'> باشد، یعنی آن تابع یک ufunc است.

مثلاً تابع np.add یک ufunc است و نوع آن باید همین کلاس باشد.

import numpy as np

print(type(np.add))

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

در مقابل، بعضی از توابع NumPy ufunc نیستند، مثل concatenate که برای چسباندن چند آرایه است.

import numpy as np

print(type(np.concatenate))

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

نکته: اگر نام تابع اشتباه نوشته شود و اصلاً وجود نداشته باشد، طبق مثال منبع، type() خطا برمی گرداند.

import numpy as np

print(type(np.blahblah))

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

استفاده از if برای تست ufunc بودن

در انتهای منبع، راهی برای استفاده در شرط if پیشنهاد شده است. می توانی نوع تابع را با np.ufunc مقایسه کنی.

اگر مساوی بود، یعنی آن تابع واقعاً ufunc است؛ اگر نبود، می توانی پیام دیگری چاپ کنی.

import numpy as np

if type(np.add) == np.ufunc:
  print('add is ufunc')
else:
  print('add is not ufunc')

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

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

جمع بندی سریع ساخت تابع ufunc

برای مرور ساخت تابع ufunc در NumPy، این چند نکته مهم را به خاطر بسپار:

  • برای ساخت تابع ufunc در NumPy از frompyfunc() استفاده می شود.
  • این متد نام تابع، تعداد ورودی و خروجی را می گیرد.
  • برای تشخیص ufunc بودن، type() باید numpy.ufunc برگرداند.
  • توابعی مثل np.add ufunc هستند، اما np.concatenate نیست.
  • در شرط if می توانی با np.ufunc تست کنی که تابع واقعاً ufunc است.