NumPy: الفرز والبحث

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

1. ما ستتعلمه




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

(1) الفرز

PYTHON
import numpy as np

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

print(np.sort(a))       # [1 1 2 3 4 5 6 9]
print(np.argsort(a))    # [1 3 0 6 2 4 7 5]  (الفهارس)

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

(2) البحث

PYTHON
import numpy as np

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

---
## 3. إيجاد مواضع الإدراج (يجب أن تكون المصفوفة مرتبة)
print(np.searchsorted(a, 4))  # 2 (أدخل بين 3 و 5)
print(np.searchsorted(a, [2, 6, 8]))  # [1 3 4]

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

(3) العناصر الفريدة

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

print(np.unique(a))  # [1 2 3 4 5 6 9]

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

▶ مثال: فرز المصفوفات (الصعوبة ⭐)

PYTHON
import numpy as np

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

---
## 6. الفرز يُرجع نسخة مرتبة
sorted_a = np.sort(a)
print("Original:", a)
print("Sorted:", sorted_a)

---
## 7. فرز في المكان
a.sort()
print("In-place:", a)

---
## 8. فرز ثنائي الأبعاد على طول المحور
b = np.array([[3, 1, 4], [1, 5, 9]])
print("Sort columns:
", np.sort(b, axis=0))
print("Sort rows:
", np.sort(b, axis=1))

المخرجات:

TEXT 📖 للعرض فقط
Original:
Sorted:
In-place:

المخرجات:

TEXT 📖 للعرض فقط
Original: [3 1 4 1 5 9 2 6]
Sorted: [1 1 2 3 4 5 6 9]
In-place: [1 1 2 3 4 5 6 9]
Sort columns:
 [[1 1 4]
 [3 5 9]]
Sort rows:
 [[1 3 4]
 [1 5 9]]

▶ مثال: استخدام argsort (الصعوبة ⭐⭐)

PYTHON
import numpy as np

scores = np.array([85, 92, 78, 95, 88])
names = np.array(['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'])

---
## 9. الحصول على الفهارس التي سترتب الدرجات
idx = np.argsort(scores)
print("Indices:", idx)
print("Sorted scores:", scores[idx])

---
## 10. ترتيب الأسماء حسب درجاتهم (تنازلياً)
desc_idx = np.argsort(-scores)
print("Ranking:")
for rank, i in enumerate(desc_idx, 1):
    print(f"  {rank}. {names[i]}: {scores[i]}")

المخرجات:

TEXT 📖 للعرض فقط
Indices:
Sorted scores:
Ranking:

المخرجات:

TEXT 📖 للعرض فقط
Indices: [2 0 4 1 3]
Sorted scores: [78 85 88 92 95]
Ranking:
  1. Diana: 95
  2. Bob: 92
  3. Eve: 88
  4. Alice: 85
  5. Charlie: 78

▶ مثال: إيجاد القيم الفريدة مع الأعداد (الصعوبة ⭐)

PYTHON
import numpy as np

grades = np.array(['A', 'B', 'A', 'C', 'B', 'A', 'B', 'B', 'C', 'A'])

unique, counts = np.unique(grades, return_counts=True)
print("Grades:", unique)
print("Counts:", counts)

---
## 11. إيجاد مكان إدراج القيم في مصفوفة مرتبة
sorted_arr = np.array([1, 3, 5, 7, 9])
pos = np.searchsorted(sorted_arr, [2, 4, 6, 8])
print("Insertion positions:", pos)

المخرجات:

TEXT 📖 للعرض فقط
Grades:
Counts:
Insertion positions:

المخرجات:

TEXT 📖 للعرض فقط
Grades: ['A' 'B' 'C']
Counts: [4 4 2]
Insertion positions: [1 2 3 4]

س هل np.sort يُعدّل المصفوفة الأصلية؟
ج لا — يُرجع نسخة مرتبة. استخدم a.sort() (طريقة في المكان) لفرز المصفوفة الأصلية دون إنشاء نسخة.
س ما الفرق بين np.sort و np.argsort؟
ج np.sort يُرجع القيم المرتبة. np.argsort يُرجع الفهارس التي ستنتج المصفوفة المرتبة. استخدم argsort عندما تحتاج إلى ترتيب مصفوفات متعددة بنفس الترتيب.
س ما هو np.partition؟
ج يُرتب المصفوفة جزئياً بحيث يكون العنصر k-th الأصغر في موضعه النهائي، مع العناصر الأصغر قبله والعناصر الأكبر بعده (بترتيب عشوائي). أسرع من الفرز الكامل لاستعلامات top-k.


❓ أسئلة شائعة

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

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ مصفوفة من 20 عدداً صحيحاً عشوائياً 0-99. رتبها، ابحث عن الفهارس التي سترتبها، وابحث عن القيم الفريدة.

  2. متوسط (الصعوبة ⭐⭐): أنشئ مصفوفتين — أسماء ودرجات. استخدم np.argsort على الدرجات لترتيب كلتا المصفوفتين بحيث يأتي الاسم الحاصل على أعلى درجة أولاً.

  3. متقدم (الصعوبة ⭐⭐⭐): استخدم np.searchsorted لدمج مصفوفتين مرتبتين في مصفوفة واحدة مرتبة دون استدعاء np.sort. تحقق من أن النتيجة مرتبة بشكل صحيح.

Web-Tutorial.com

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

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

100%