NumPy: المصفوفات المهيكلة

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

1. ما ستتعلمه




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

PYTHON
import numpy as np

# تعريف نوع مهيكل
dt = np.dtype([('name', 'U10'), ('age', 'i4'), ('salary', 'f8')])

---
## 3. إنشاء مصفوفة
employees = np.array([
    ('Alice', 30, 75000.0),
    ('Bob', 25, 62000.0),
    ('Charlie', 35, 85000.0),
    ('Diana', 28, 71000.0)
], dtype=dt)

---
## 4. الوصول إلى الحقول
print(employees['name'])     # ['Alice' 'Bob' 'Charlie' 'Diana']
print(employees['salary'])   # [75000. 62000. 85000. 71000.]

---
## 5. مصفوفة سجلات (وصول بالخاصية)
emp_rec = np.rec.array(employees)
print(emp_rec.name)          # ['Alice' 'Bob' 'Charlie' 'Diana']
print(emp_rec.salary)        # [75000. 62000. 85000. 71000.]

---
## 6. التصفية
print(employees[employees['salary'] > 70000]['name'])
---
## 7. ['Alice' 'Charlie']

---
## 8. الفرز
sorted_emp = np.sort(employees, order='salary')
print(sorted_emp['name'])  # ['Bob' 'Diana' 'Alice' 'Charlie']
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

▶ مثال: إنشاء والوصول إلى المصفوفات المهيكلة (الصعوبة ⭐)

PYTHON
import numpy as np

dt = np.dtype([('product', 'U15'), ('price', 'f8'), ('quantity', 'i4')])

inventory = np.array([
    ('Widget', 9.99, 100),
    ('Gadget', 24.99, 50),
    ('Doohickey', 4.99, 200),
    ('Thingamajig', 14.99, 75)
], dtype=dt)

print("Products:", inventory['product'])
print("Prices:", inventory['price'])
print("Total value:", np.sum(inventory['price'] * inventory['quantity']))

المخرجات:

TEXT 📖 للعرض فقط
Products:
Prices:
Total value:

المخرجات:

TEXT 📖 للعرض فقط
Products: ['Widget' 'Gadget' 'Doohickey' 'Thingamajig']
Prices: [ 9.99 24.99  4.99 14.99]
Total value: 4396.0

▶ مثال: تصفية المصفوفات المهيكلة (الصعوبة ⭐⭐)

PYTHON
import numpy as np

dt = np.dtype([('name', 'U15'), ('age', 'i4'), ('salary', 'f8')])
employees = np.array([
    ('Alice', 30, 75000), ('Bob', 25, 62000),
    ('Charlie', 35, 85000), ('Diana', 28, 71000),
    ('Eve', 45, 95000), ('Frank', 32, 78000)
], dtype=dt)

---
## 9. تصفية: الراتب > 70000 AND العمر < 40
mask = (employees['salary'] > 70000) & (employees['age'] < 40)
filtered = employees[mask]
print("Filtered:", filtered['name'])

---
## 10. متوسط الراتب حسب الفئة العمرية
young = employees[employees['age'] < 30]
print("Young avg salary:", young['salary'].mean())

المخرجات:

TEXT 📖 للعرض فقط
Filtered:
Young avg salary:

المخرجات:

TEXT 📖 للعرض فقط
Filtered: ['Alice' 'Charlie' 'Frank']
Young avg salary: 66500.0

▶ مثال: فرز المصفوفات المهيكلة حسب الحقل (الصعوبة ⭐⭐)

PYTHON
import numpy as np

dt = np.dtype([('city', 'U15'), ('population', 'i4'), ('area', 'f8')])
cities = np.array([
    ('Tokyo', 13960000, 2194), ('Delhi', 16780000, 1484),
    ('Shanghai', 24870000, 6341), ('Mumbai', 12440000, 603),
    ('Beijing', 21540000, 16411)
], dtype=dt)

---
## 11. فرز حسب عدد السكان تنازليًا
by_pop = np.sort(cities, order='population')[::-1]
print("By population:", by_pop['city'])

---
## 12. فرز حسب الكثافة (عدد السكان / المساحة)
density = cities['population'] / cities['area']
dense_idx = np.argsort(-density)
print("By density:", cities['city'][dense_idx])

المخرجات:

TEXT 📖 للعرض فقط
By population:
By density:

المخرجات:

TEXT 📖 للعرض فقط
By population: ['Shanghai' 'Beijing' 'Delhi' 'Tokyo' 'Mumbai']
By density: ['Mumbai' 'Delhi' 'Tokyo' 'Shanghai' 'Beijing']

س متى يجب استخدام المصفوفات المهيكلة مقابل Pandas؟
ج استخدم المصفوفات المهيكلة عندما تحتاج سرعة NumPy وكفاءة الذاكرة للعمليات المتجانسة. استخدم Pandas لتحليل بيانات أكثر تعقيدًا مع التوسيم والتجميع ومعالجة البيانات المفقودة.
س هل يمكنني إضافة حقول إلى مصفوفة مهيكلة موجودة؟
ج لا — المصفوفات المهيكلة لها dtype ثابت. أنشئ dtype جديد بالحقول الإضافية وانسخ البيانات. استخدم np.lib.recfunctions.append_fields للتسهيل.
س ما الفرق بين المصفوفة المهيكلة ومصفوفة السجلات (recarray)؟
ج مصفوفة السجلات تسمح بالوصول بالخاصية (emp.name) بالإضافة إلى الوصول بالحقل (emp['name']). إنها أبطأ قليلاً لكنها أكثر ملاءمة.


❓ أسئلة شائعة

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

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ مصفوفة مهيكلة بحقول: product (U20)، price (f8)، quantity (i4). أضف 5 منتجات.

  2. متوسط (الصعوبة ⭐⭐): من مصفوفة المنتجات، صفّ العناصر ذات السعر > 50 والكمية < 10. رتب حسب السعر تنازليًا.

  3. متقدم (الصعوبة ⭐⭐⭐): استخدم np.lib.recfunctions لإضافة حقل 'total_value' (السعر × الكمية) إلى المصفوفة. تحقق من صحة الحساب.

Web-Tutorial.com

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

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

100%