NumPy: الدوال الشاملة (ufunc)

آخر تحديث: 2026-08-26

1. ما ستتعلمه




2. المفاهيم الأساسية

(1) ما هي الدالة الشاملة (ufunc)

الدالة الشاملة (ufunc) هي دالة على مستوى لغة C تعمل عنصرًا بعنصر على المصفوفات ndarray. جميع عمليات الحساب تستدعي دوال ufunc داخليًا.

PYTHON
import numpy as np

# العوامل هي دوال ufunc
print(np.add)        # ufunc 'add'
print(np.multiply)   # ufunc 'multiply'
print(np.sin)        # ufunc 'sin'

---
## 3. خصائص ufunc
print(np.add.nin)    # 2 (عدد المدخلات)
print(np.add.nout)   # 1 (عدد المخرجات)
print(np.add.ntypes)  # عدد تركيبات الأنواع المدعومة

(2) طرق ufunc

PYTHON
a = np.array([1, 2, 3, 4, 5])

---
## 4. reduce: تطبيق متكرر للوصول إلى قيمة واحدة
print(np.add.reduce(a))     # 15 (المجموع)
print(np.multiply.reduce(a))  # 120 (الجداء)

---
## 5. accumulate: النتائج التراكمية
print(np.add.accumulate(a))  # [1 3 6 10 15]

---
## 6. outer: تطبيق على جميع الأزواج
print(np.multiply.outer([1, 2, 3], [10, 20, 30]))
---
## 7. [[10 20 30]
---
##  8. [20 40 60]
---
##  9. [30 60 90]]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

▶ مثال: خصائص ufunc (الصعوبة ⭐)

PYTHON
import numpy as np

print("add:", np.add)
print("multiply:", np.multiply)
print("sin:", np.sin)

print(f"np.add.nin: {np.add.nin}")
print(f"np.add.nout: {np.add.nout}")
print(f"np.add.ntypes: {np.add.ntypes}")

المخرجات:

TEXT 📖 للعرض فقط
add:
multiply:
sin:

المخرجات:

TEXT 📖 للعرض فقط
add: ufunc 'add'
multiply: ufunc 'multiply'
sin: ufunc 'sin'
np.add.nin: 2
np.add.nout: 1
np.add.ntypes: 22

▶ مثال: دوال reduce و accumulate (الصعوبة ⭐⭐)

PYTHON
import numpy as np

a = np.array([1, 2, 3, 4, 5])

---
## 10. reduce: تطبيق متكرر للحصول على قيمة واحدة
print("add.reduce:", np.add.reduce(a))
print("multiply.reduce:", np.multiply.reduce(a))

---
## 11. accumulate: النتائج التراكمية
print("add.accumulate:", np.add.accumulate(a))
print("multiply.accumulate:", np.multiply.accumulate(a))

المخرجات:

TEXT 📖 للعرض فقط
add.reduce:
multiply.reduce:
add.accumulate:
multiply.accumulate:

المخرجات:

TEXT 📖 للعرض فقط
add.reduce: 15
multiply.reduce: 120
add.accumulate: [ 1  3  6 10 15]
multiply.accumulate: [  1   2   6  24 120]

▶ مثال: ufunc outer (الصعوبة ⭐⭐)

PYTHON
import numpy as np

---
## 12. الجداء الخارجي: ضرب كل زوج
x = np.array([1, 2, 3])
y = np.array([10, 20, 30, 40])
print("outer:\n", np.multiply.outer(x, y))

---
## 13. المقارنة الخارجية
a = np.array([1, 3, 5])
b = np.array([2, 4, 6])
print("greater.outer:\n", np.greater.outer(a, b))

المخرجات:

TEXT 📖 للعرض فقط
outer:\n
greater.outer:\n

المخرجات:

TEXT 📖 للعرض فقط
outer:
 [[ 10  20  30  40]
 [ 20  40  60  80]
 [ 30  60  90 120]]
greater.outer:
 [[False False False]
 [ True False False]
 [ True  True False]]

س ما الفرق بين الدالة الشاملة والدالة العادية؟
ج الدالة الشاملة تعمل عنصرًا بعنصر، وتتعامل مع البث (broadcasting)، وترقية الأنواع، وتخزين المخرجات تلقائيًا. وهي منفذة بلغة C، مما يجعلها أسرع بكثير من دوال Python.
س كيف يمكنني إنشاء دالة شاملة مخصصة؟
ج استخدم np.frompyfunc(func, nin, nout) لتغليف دالة Python. الدالة الشاملة الناتجة تتعامل مع البث لكنها لا تزال على مستوى Python، لذا الأداء محدود.
س ما هي reduceat؟
ج np.add.reduceat(a, indices) تطبق reduce على شرائح محددة — مفيدة للمجاميع المجزأة أو العمليات المجمعة.


❓ أسئلة شائعة

س ما هو أهم شيء يجب تذكره؟
ج عمليات NumPy متجهة — تجنب حلقات Python لأداء أفضل.
س أين يمكنني معرفة المزيد؟
ج اطّلع على وثائق NumPy الرسمية على numpy.org للمراجع التفصيلية والمواضيع المتقدمة.
س هل يعمل هذا مع NumPy 2.x؟
ج نعم — جميع الأمثلة متوافقة مع NumPy 2.x. بعض الواجهات القديمة (مثل np.random.seed) لا تزال مدعومة لكن البدائل الحديثة موصى بها.

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): اذكر خصائص np.add — nin، nout، ntypes، types. اشرح معنى كل منها.

  2. متوسط (الصعوبة ⭐⭐): استخدم np.add.reduce لجمع مصفوفة، وnp.add.accumulate لحساب المجموع التراكمي، وnp.multiply.outer لإنشاء جدول ضرب.

  3. متقدم (الصعوبة ⭐⭐⭐): استخدم np.frompyfunc لإنشاء دالة شاملة مخصصة تعيد الرقم الأكبر من رقمين. طبقها على مصفوفتين وقارن مع np.maximum.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%