NumPy: الفهرسة المنطقية والمتقدمة
آخر تحديث: 2026-08-26
1. ما ستتعلمه
- ❶ الأقنعة المنطقية — استخدام التعبيرات الشرطية لتوليد مصفوفات True/False للتصفية
- ❷
np.where— الاختيار الشرطي الثلاثي واستبدال العناصر - ❸ الفهرسة المتقدمة — تحديد العناصر بترتيب عشوائي باستخدام مصفوفات صحيحة
- ❹ الفهرسة المدمجة — خلط الفهرسة الأساسية والمتقدمة
- ❺ الفهرسة المتقدمة تعيد نسخًا — الفرق الرئيسي من العروض
2. قصة
أليس لديها 100,000 قراءة درجة حرارة وتحتاج إلى إيجاد جميع القراءات فوق 40°C. تكتب temps[temps > 40] وتحصل على النتيجة فورًا. بوب مندهش: "حلقة Python مع عبارات if ستأخذ 5 أسطر على الأقل — NumPy يفعلها في سطر واحد، أسرع بـ 100 مرة تقريبًا!" هذه هي قوة الفهرسة المتقدمة في NumPy — تصفية بيانات معقدة بتعبيرات موجزة.
3. الأقنعة المنطقية
(1) ما هو القناع المنطقي
القناع المنطقي هو مصفوفة True/False بنفس شكل المصفوفة الأصلية. عوامل المقارنة في NumPy تعمل على مستوى العناصر وتعيد مصفوفات منطقية.
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]
> **المخرجات:** قم بتشغيل 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. يجب وضع كل شرط بين أقواس.
arr = np.array([1, 5, 8, 3, 9, 2])
mask = (arr > 3) & (arr < 8) # 3 < arr < 8
print(arr[mask]) # [5]
> **المخرجات:** قم بتشغيل 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.
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]
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
(2) صيغة المعامل الواحد: np.where(condition)
تعيد الفهارس حيث الشرط True.
indices = np.where(arr > 0)
print(indices) # (array([1, 3, 5]),)
print(arr[indices]) # [5 8 7]
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
5. الفهرسة المتقدمة
الفهرسة المتقدمة تستخدم مصفوفات صحيحة لتحديد العناصر بأي ترتيب.
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 لجميع الصفوف
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: تصفية بالقناع المنطقي (الصعوبة ⭐)
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]
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: np.where للاستبدال الشرطي (الصعوبة ⭐⭐)
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']
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
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_ (الصعوبة ⭐⭐)
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)
المخرجات:
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] يعيد القيم حيث mask هو True. np.where(mask) يعيد الفهارس حيث mask هو True. استخدم arr[mask] للقيم، np.where(mask) عندما تحتاج المواقع.arr[[0,2], [1,3]] يحدد العناصر في (0,1) و (2,3). لاختيار صفوف وأعمدة مستقلة، استخدم arr[np.ix_([0,2], [1,3])].np.where(mask) للحصول على فهارس الشكل الأصلي.📖 ملخص
- الأقنعة المنطقية:
arr[arr > 0]— تصفية بالشرط، تعيد نسخة - الدمج المنطقي: استخدم
&،|،~مع أقواس حول كل شرط np.where(cond, x, y): اختيار ثلاثي — يعيد x حيث True، y حيث Falsenp.where(cond): يعيد الفهارس حيث الشرط True- الفهرسة المتقدمة:
arr[[i1, i2, ...]]— تحديد بفهارس صحيحة عشوائية - الفهرسة المتقدمة (منطقية + متقدمة) تعيد دائمًا نسخة، وليست عرضًا
📝 تمارين
-
مبتدئ (الصعوبة ⭐): أنشئ مصفوفة من 20 عددًا صحيحًا عشوائيًا بين -10 و 10. استخدم قناعًا منطقيًا لاستخراج جميع القيم الموجبة. استخدم
np.whereلاستبدال جميع القيم السالبة بـ 0. -
متوسط (الصعوبة ⭐⭐): أنشئ مصفوفة 5x5 من أعداد صحيحة عشوائية 0-100. استخدم الأقنعة المنطقية لـ: (أ) عد القيم فوق 50، (ب) استبدال القيم تحت 20 بـ 20، (ج) استخراج فهارس الصفوف والأعمدة لجميع القيم > 80 باستخدام
np.where. -
متقدم (الصعوبة ⭐⭐⭐): أنشئ مصفوفة 10x4 لدرجات الطلاب (10 طلاب، 4 مواد). استخدم الفهرسة المتقدمة لـ: (أ) تحديد الطلاب في المواقع [0,3,7] لجميع المواد، (ب) تحديد المواد في المواقع [1,3] لجميع الطلاب، (ج) حساب متوسط أفضل 3 طلاب حسب المجموع الكلي.