NumPy ufuncs

ufuncs چیست؟

ufuncs مخفف کلمات Universal Functions است و توابعی در NumPy هستند که روی اشیاء ndarray عمل می‌کنند.

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

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

ufuncها دارای یک سری آرگومان‌های اختیاری نیز هستند که کارکرد آن‌ها را گسترش می‌دهد مانند:

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

برداری کردن چیست؟

تبدیل دستورات تکراری (iterative statements) به عملیات‌هایی بر پایه بردار را برداری کردن می‌گویند. برداری کردن بسیار سریعتر است چنانکه CPUهای امروزی برای انجام آن بهینه شده‌اند.

برای بهتر جا افتادن مطلب، فرض کنید می‌خواهیم دو لیست زیر را با هم جمع کنیم.

list1: [1, 2, 3, 4]
list2: [5, 6, 7, 8]

یک راه برای انجام این کار ایجاد یک حلقه و جمع عناصر با یکدیگر است.


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

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

خروجی:

راه دیگر استفاده از دستور add(x, y) که یک ufunc در NumPy است می‌باشد. نتیجه نهایی همان ولی سرعت آن بسیار بیشتر است (برای درک اینکه چه تفاوتی در سرعت اجرای برنامه می‌شود، سعی کنید در کد قبلی آرایه‌هایی با تعداد عناصر بسیار زیاد مثلاً هزار یا ده هزار عنصری را با هم جمع کنید و سپس همان آرایه‌ها را به روش کد پایین با هم جمع کنید).


import numpy as np

x = [1, 2, 3, 4]
y = [4, 5, 6, 7]
z = np.add(x, y)

print(z)

خروجی: