NumPy: الفهرسة المنطقية والمتقدمة

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

1. ما ستتعلمه




2. قصة

أليس لديها 100,000 قراءة درجة حرارة وتحتاج إلى إيجاد جميع القراءات فوق 40°C. تكتب temps[temps > 40] وتحصل على النتيجة فورًا. بوب مندهش: "حلقة Python مع عبارات if ستأخذ 5 أسطر على الأقل — NumPy يفعلها في سطر واحد، أسرع بـ 100 مرة تقريبًا!" هذه هي قوة الفهرسة المتقدمة في NumPy — تصفية بيانات معقدة بتعبيرات موجزة.




3. الأقنعة المنطقية

(1) ما هو القناع المنطقي

القناع المنطقي هو مصفوفة True/False بنفس شكل المصفوفة الأصلية. عوامل المقارنة في NumPy تعمل على مستوى العناصر وتعيد مصفوفات منطقية.

PYTHON
import numpy as np

arr = np.array([3, -1, 4, -2, 5])
mask = arr > 0
print(mask)   # [ True False  True False  True]
print(arr[mask])  # [3 4 5]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

(2) عوامل المقارنة

العامل المعنى الدالة المكافئة
> أكبر من np.greater
>= أكبر أو يساوي np.greater_equal
< أصغر من np.less
<= أصغر أو يساوي np.less_equal
== يساوي np.equal
!= لا يساوي np.not_equal

(3) الدمج المنطقي

ادمج عدة شروط باستخدام العوامل المنطقية — استخدم & (و)، | (أو)، ~ (ليس)، وليس and/or/not في Python. يجب وضع كل شرط بين أقواس.

PYTHON
arr = np.array([1, 5, 8, 3, 9, 2])
mask = (arr > 3) & (arr < 8)   # 3 < arr < 8
print(arr[mask])  # [5]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
العامل المنطقي المعنى الدالة المكافئة
& AND منطقي np.logical_and
| OR منطقي np.logical_or
~ NOT منطقي np.logical_not



4. np.where والاختيار الشرطي

(1) صيغة الثلاث معاملات: np.where(condition, x, y)

تعيد عناصر من x حيث الشرط True، ومن y حيث False.

PYTHON
import numpy as np

arr = np.array([-3, 5, -1, 8, -2, 7])
result = np.where(arr > 0, arr, 0)
print(result)  # [0 5 0 8 0 7]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

(2) صيغة المعامل الواحد: np.where(condition)

تعيد الفهارس حيث الشرط True.

PYTHON
indices = np.where(arr > 0)
print(indices)  # (array([1, 3, 5]),)
print(arr[indices])  # [5 8 7]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.



5. الفهرسة المتقدمة

الفهرسة المتقدمة تستخدم مصفوفات صحيحة لتحديد العناصر بأي ترتيب.

PYTHON
import numpy as np

a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]

# تحديد فهارس محددة
print(a[[0, 3, 7]])      # [0 3 7]

---
## 6. تحديد بأي ترتيب، مع التكرار
print(a[[5, 5, 1, 9]])   # [5 5 1 9]

---
## 7. فهرسة متقدمة 2D
b = np.arange(12).reshape(3, 4)
print(b[[0, 2]])          # الصفوف 0 و 2
print(b[:, [0, 2, 3]])    # الأعمدة 0, 2, 3 لجميع الصفوف
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, 68])

passing = scores[scores >= 60]
print("Passing:", passing)  # [82 91 73 100 68]

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

---
## 8. شروط متعددة
mid = scores[(scores >= 60) & (scores < 90)]
print("Mid-range:", mid)  # [82 73 68]
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 والبذرة العشوائية.

: np.where للاستبدال الشرطي (الصعوبة ⭐⭐)

PYTHON
import numpy as np

---
## 9. قص النطاق: استبدال القيم خارج [0, 100]
data = np.array([-5, 120, 30, -20, 80, 200])
clipped = np.where(data < 0, 0, np.where(data > 100, 100, data))
print("Clipped:", clipped)  # [  0 100  30   0  80 100]

---
## 10. تصنيف
grades = np.array([45, 72, 88, 55, 91])
letter = np.where(grades >= 85, 'A',
          np.where(grades >= 70, 'B',
          np.where(grades >= 60, 'C', 'D')))
print("Grades:", letter)  # ['D' 'B' 'A' 'D' 'A']
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.




11. جداول المقارنة

(1) طرق الفهرسة

الطريقة الصيغة الإرجاع تنسخ؟ حالة الاستخدام
شريحة أساسية a[1:3] عرض لا مصفوفة فرعية، نطاق متصل
فهرس صحيح a[2] عددي N/A عنصر واحد
قناع منطقي a[mask] مصفوفة 1D نعم تصفية شرطية
فهرسة متقدمة a[[1,3,5]] مصفوفة نعم تحديد بترتيب عشوائي
np.where np.where(cond, x, y) مصفوفة نعم اختيار ثلاثي

(2) منطقي مقابل متقدم

الميزة قناع منطقي فهرسة متقدمة
الصيغة arr[arr > 0] arr[[1, 3, 5]]
منطق التحديد قائم على الشرط قائم على الموقع
شكل النتيجة 1D (مفلطح) نفس شكل مصفوفة الفهرس
السرعة سريع للأقنعة الكبيرة سريع للتحديد المتناثر

▶ مثال: فهرسة متقدمة 2D مع np.ix_ (الصعوبة ⭐⭐)

PYTHON
import numpy as np

arr = np.arange(20).reshape(4, 5)
print("Original:\n", arr)

---
## 12. تحديد صفوف وأعمدة محددة
rows = [0, 2, 3]
cols = [1, 3]
result = arr[np.ix_(rows, cols)]
print("Rows [0,2,3], Cols [1,3]:\n", result)

---
## 13. تعديل العناصر المحددة
arr[np.ix_([0, 1], [0, 4])] = -1
print("After modification:\n", arr)

المخرجات:

TEXT 📖 للعرض فقط
Original:\n
Rows [0,2,3], Cols [1,3]:\n
After modification:\n

المخرجات:

TEXT 📖 للعرض فقط
Original:
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
Rows [0,2,3], Cols [1,3]:
 [[ 1  3]
 [11 13]
 [16 18]]
After modification:
 [[-1  1  2  3 -1]
 [-1  6  7  8 -1]
 [10 11 12 13 14]
 [15 16 17 18 19]]



❓ أسئلة شائعة

س هل يمكنني استخدام قناع منطقي لتعديل القيم؟
ج نعم! arr[arr > 0] = 0 يضبط جميع القيم الموجبة إلى 0. هذا تعديل في المكان. np.where(arr > 0, 0, arr) يعيد مصفوفة جديدة بدلاً من ذلك.
س ما الفرق بين arr[mask] و np.where(mask)؟
ج arr[mask] يعيد القيم حيث mask هو True. np.where(mask) يعيد الفهارس حيث mask هو True. استخدم arr[mask] للقيم، np.where(mask) عندما تحتاج المواقع.
س هل يمكنني استخدام الفهرسة المتقدمة مع مصفوفات 2D؟
ج نعم. arr[[0,2], [1,3]] يحدد العناصر في (0,1) و (2,3). لاختيار صفوف وأعمدة مستقلة، استخدم arr[np.ix_([0,2], [1,3])].
س هل الأقنعة المنطقية تعيد دائمًا مصفوفات 1D؟
ج للمصفوفات 2D+، نعم — القناع يفلطح النتيجة إلى 1D. استخدم np.where(mask) للحصول على فهارس الشكل الأصلي.

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ مصفوفة من 20 عددًا صحيحًا عشوائيًا بين -10 و 10. استخدم قناعًا منطقيًا لاستخراج جميع القيم الموجبة. استخدم np.where لاستبدال جميع القيم السالبة بـ 0.

  2. متوسط (الصعوبة ⭐⭐): أنشئ مصفوفة 5x5 من أعداد صحيحة عشوائية 0-100. استخدم الأقنعة المنطقية لـ: (أ) عد القيم فوق 50، (ب) استبدال القيم تحت 20 بـ 20، (ج) استخراج فهارس الصفوف والأعمدة لجميع القيم > 80 باستخدام np.where.

  3. متقدم (الصعوبة ⭐⭐⭐): أنشئ مصفوفة 10x4 لدرجات الطلاب (10 طلاب، 4 مواد). استخدم الفهرسة المتقدمة لـ: (أ) تحديد الطلاب في المواقع [0,3,7] لجميع المواد، (ب) تحديد المواد في المواقع [1,3] لجميع الطلاب، (ج) حساب متوسط أفضل 3 طلاب حسب المجموع الكلي.

Web-Tutorial.com

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

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

100%