NumPy: العمليات على العناصر

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

1. ما ستتعلمه




2. قصة

يستخدم بوب حلقة for لتربيع مليون رقم — يستغرق 0.3 ثانية. أليس تكتب سطراً واحداً a ** 2 — 3 ملي ثانية.

"عمليات NumPy الحسابية ليست حلقة Python. إنها عملية ufunc دفعية على مستوى C، أسرع بـ 100 مرة."

يسأل بوب: "ما هو ufunc؟" تفتح أليس محطتها وتكتب np.add — كل شيء يبدأ بالعمليات على العناصر.




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

(1) العوامل الحسابية والدوال

تعمل عمليات NumPy الحسابية على كل عنصر من المصفوفة، مع بث الأشكال تلقائياً:

PYTHON
import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])

print(a + b)      # [11 22 33 44]
print(a * b)      # [10 40 90 160]
print(a ** 2)     # [ 1  4  9 16]
print(b // a)     # [10 10 10 10]
print(b % a)      # [0 0 0 0]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

كل عامل يقابل دالة NumPy:

العامل الدالة الوصف
+ np.add الجمع
- np.subtract الطرح
* np.multiply الضرب
/ np.true_divide القسمة الحقيقية
// np.floor_divide قسمة الأرضية
% np.mod باقي القسمة
** np.power الأس

(2) عمليات المقارنة

المقارنات تتم على كل عنصر، وتُعيد مصفوفات منطقية (أقنعة):

PYTHON
a = np.array([3, 7, 1, 9, 5])

print(a > 4)           # [False  True False  True  True]
print(a == 7)          # [False  True False False False]
print((a >= 3) & (a <= 7))  # [ True  True False False  True]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

(3) العمليات المنطقية

استخدم العوامل على مستوى البت & | ^ ~ (وليس and or not) للدمج المنطقي على مستوى العناصر:

PYTHON
a = np.array([True, True, False, False])
b = np.array([True, False, True, False])

print(a & b)                # [ True False False False]
print(a | b)                # [ True  True  True False]
print(~a)                   # [False False  True  True]
print(np.logical_and(a, b)) # [ True False False False]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

(4) مفهوم ufunc

ufunc (الدالة العامة) هي التجريد منخفض المستوى في NumPy للعمليات على العناصر:

PYTHON
print(np.add.nin)   # 2 (عدد المدخلات)
print(np.add.nout)  # 1 (عدد المخرجات)
print(np.add.types) # قائمة تواقيع الأنواع المدعومة
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.


▶ مثال

TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

: العمليات الحسابية (الصعوبة ⭐)

PYTHON
import numpy as np

a = np.array([2, 4, 6, 8])
b = np.array([1, 3, 5, 7])

print("a + b =", a + b)        # [ 3  7 11 15]
print("a - b =", a - b)        # [1 1 1 1]
print("a * b =", a * b)        # [ 2 12 30 56]
print("a / b =", a / b)        # [2.   1.33 1.2  1.14]
print("a // b =", a // b)      # [2 1 1 1]
print("a % b =", a % b)        # [0 1 1 1]
print("a ** 3 =", a ** 3)      # [  8  64 216 512]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

▶ مثال

TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

: أقنعة المقارنة (الصعوبة ⭐)

PYTHON
import numpy as np

scores = np.array([55, 82, 91, 47, 73, 100])

pass_mask = scores >= 60
print("Pass mask:", pass_mask)
print("Pass scores:", scores[pass_mask])

excellent = scores >= 90
print("Excellent:", scores[excellent])

mid_range = (scores >= 60) & (scores < 90)
print("Mid-range:", scores[mid_range])
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

▶ مثال: استخدام معامل out في ufunc (الصعوبة ⭐⭐)

PYTHON
import numpy as np

a = np.array([10, 20, 30, 40])
b = np.array([3, 4, 5, 6])

# الجمع في المكان باستخدام معامل out
result = np.empty(4)
np.add(a, b, out=result)
print("Result:", result)

---
## 4. تسلسل العمليات باستخدام out
np.multiply(result, 2, out=result)
print("Doubled:", result)

---
## 5. ufunc للمقارنة
print("a > 15:", np.greater(a, 15))

المخرجات:

TEXT 📖 للعرض فقط
Result:
Doubled:
a > 15:

المخرجات:

TEXT 📖 للعرض فقط
Result: [13 24 35 46]
Doubled: [26 48 70 92]
a > 15: [False  True  True  True]



❓ أسئلة شائعة

س لماذا استخدام np.add بدلاً من +؟
ج هما متطابقان — + يستدعي np.add داخلياً. استخدم صيغة الدالة عندما تحتاج معاملات إضافية مثل dtype أو out أو where، أو عند تمرير ufunc كاستدعاء.
س هل القسمة على صفر تسبب خطأ؟
ج لا استثناء للأعداد العشرية — تُنتج inf أو -inf، و 0/0 تُنتج nan، مع تحذير اختياري بناءً على np.seterr. القسمة على صفر للأعداد الصحيحة تسبب ZeroDivisionError.
س هل المتجهة دائماً أسرع من الحلقات؟
ج للمصفوفات الكبيرة مع عمليات بسيطة، المتجهة أسرع بـ 50-200 مرة. لكن للمصفوفات الصغيرة جداً (أقل من 100 عنصر)، قد يكون overhead استدعاء ufunc أبطأ من الحلقة.
س ما هو ufunc؟
ج دالة عامة — غلاف على مستوى C للعمليات على العناصر. كل ufunc يتعامل مع البث وترقية الأنواع والتخزين المؤقت للمخرجات تلقائياً. إنه المحرك وراء المتجهة في NumPy.

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ x = np.linspace(-5, 5, 100). احسب دالة السيجمويد 1 / (1 + np.exp(-x)) باستخدام المتجهة. احسب عدد النتائج الأكبر من 0.5.

  2. متوسط (الصعوبة ⭐⭐): احسب np.sin(x) لمليون رقم عشوائي باستخدام حلقة for والمتجهة. قارن الزمن واحسب عامل التسريع.

  3. متقدم (الصعوبة ⭐⭐⭐): نفذ دالة ReLU مُتجهة max(0, x) لـ x = np.linspace(-3, 3, 20). نفذها باستخدام قناع منطقي x * (x > 0) و np.maximum(0, x).

Web-Tutorial.com

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

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

100%