ساخت ufunc سفارشی

ساخت توابع جهانی سفارشی (ufunc) در NumPy

در کتابخانه NumPy، توابع جهانی (Universal Functions) یا ufuncها، عملیات برداری کارآمدی را روی آرایه‌های ndarray ارائه می‌دهند. این توابع امکان اجرای عملیات ریاضی و منطقی را به صورت عنصر به عنصر فراهم می‌کنند.

نکته کلیدی: ufuncهای سفارشی به شما اجازه می‌دهند عملیات خاص خود را با کارایی مشابه توابع داخلی NumPy پیاده‌سازی کنید.

مراحل ساخت ufunc سفارشی

برای ایجاد یک تابع جهانی سفارشی در NumPy، می‌توانید از تابع numpy.frompyfunc یا numpy.vectorize استفاده کنید:

  1. تعریف تابع پایتون معمولی که عملیات مورد نظر را انجام می‌دهد
  2. تبدیل تابع به ufunc با استفاده از frompyfunc
  3. تعیین تعداد ورودی‌ها و خروجی‌های تابع
  4. اعمال ufunc روی آرایه‌های NumPy
روش مزایا معایب
frompyfunc انعطاف‌پذیری بالا سرعت کمتر نسبت به ufuncهای داخلی
vectorize سینتکس ساده‌تر کارایی پایین‌تر برای آرایه‌های بزرگ

مثال عملی: ساخت تابع محاسبه هذلولی

در این مثال یک تابع برای محاسبه سینوس هذلولی پیاده‌سازی می‌کنیم:

import numpy as np

def custom_hyperbolic(x):
    return (np.exp(x) - np.exp(-x)) / 2

hyperbolic_ufunc = np.frompyfunc(custom_hyperbolic, 1, 1)

arr = np.array([0, 1, 2, 3])
result = hyperbolic_ufunc(arr)

این تابع سفارشی اکنون می‌تواند مانند هر ufunc دیگری روی آرایه‌های NumPy اعمال شود. برای اطلاعات بیشتر درباره کاربردهای پیشرفته‌تر می‌توانید بیشتر بخوانید.

بهینه‌سازی ufuncهای سفارشی

  • استفاده از تایپ‌های داده NumPy به جای تایپ‌های پایتون
  • اجتناب از حلقه‌های پایتون در توابع
  • استفاده از عملیات برداری موجود در NumPy
  • اعتبارسنجی ورودی‌ها قبل از پردازش

با ساخت ufuncهای سفارشی می‌توانید کتابخانه NumPy را برای نیازهای خاص خود گسترش دهید و از مزایای بهینه‌سازی‌های داخلی آن بهره ببرید. این روش به ویژه در پردازش داده‌های علمی و مهندسی کاربرد فراوانی دارد.