NumPy: الدوال الشاملة (ufunc)
آخر تحديث: 2026-08-26
1. ما ستتعلمه
- ❶ ما هي الدالة الشاملة — ufunc
- ❷ خصائص ufunc: nin، nout، ntypes، types
- ❸ طرق ufunc: reduce، accumulate، outer، reduceat
- ❹ إنشاء دوال ufunc مخصصة باستخدام
np.frompyfunc
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) لا تزال مدعومة لكن البدائل الحديثة موصى بها.
📖 ملخص
- دوال ufunc هي دوال على مستوى C تعمل عنصرًا بعنصر:
np.add،np.multiply،np.sin، إلخ. - الخصائص:
nin،nout،ntypes،typesتصف واجهة ufunc - الطرق:
reduce(قيمة واحدة)،accumulate(تراكمي)،outer(جميع الأزواج)،reduceat(شرائح) - دوال ufunc هي المحرك وراء التوجيه (vectorization) والبث (broadcasting) في NumPy
📝 تمارين
-
مبتدئ (الصعوبة ⭐): اذكر خصائص
np.add— nin، nout، ntypes، types. اشرح معنى كل منها. -
متوسط (الصعوبة ⭐⭐): استخدم
np.add.reduceلجمع مصفوفة، وnp.add.accumulateلحساب المجموع التراكمي، وnp.multiply.outerلإنشاء جدول ضرب. -
متقدم (الصعوبة ⭐⭐⭐): استخدم
np.frompyfuncلإنشاء دالة شاملة مخصصة تعيد الرقم الأكبر من رقمين. طبقها على مصفوفتين وقارن معnp.maximum.