NumPy: عمليات التجميع

آخر تحديث: 2026-10-11

1. ما ستتعلمه




2. قصة

تحتاج أليس إلى حساب المتوسط والحد الأقصى والانحراف المعياري لـ 10 ملايين قراءة استشعار. في Python، كانت ستكتب ثلاث حلقات — 15 ثانية. في NumPy: data.mean() و data.max() و data.std() — 0.05 ثانية إجمالاً. "التجميع في NumPy ليس أسرع فحسب — إنه نموذج مختلف. استدعاء دالة واحد، تنفيذ على مستوى C، بدون حلقة Python."




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

(1) التجميعات الأساسية

PYTHON
import numpy as np

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

print(a.sum())       # 25
print(a.mean())      # 5.0
print(a.std())       # 2.828
print(a.var())       # 8.0
print(a.min())       # 1
print(a.max())       # 9
print(a.argmin())    # 2 (فهرس الأصغر)
print(a.argmax())    # 3 (فهرس الأكبر)
print(a.ptp())       # 8 (الذروة إلى الذروة: max - min)
TEXT
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

(2) التجميع على أساس المحاور

PYTHON
import numpy as np

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

# المجموع على طول المحور 0 (عمودياً)
print(a.sum(axis=0))  # [12 15 18 21]

# المجموع على طول المحور 1 (صفياً)
print(a.sum(axis=1))  # [6 22 38]

# المجموع الكلي
print(a.sum())        # 66
TEXT
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

(3) الدوال الآمنة مع NaN

البيانات الواقعية غالباً ما تحتوي على قيم NaN. التجميعات القياسية تنشر NaN:

PYTHON
import numpy as np

a = np.array([1.0, 2.0, np.nan, 4.0])

print(a.mean())        # nan
print(np.nanmean(a))   # 2.333
print(np.nansum(a))    # 7.0
print(np.nanstd(a))    # 1.247
print(np.nanmin(a))    # 1.0
print(np.nanmax(a))    # 4.0
TEXT
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.

(4) العمليات التراكمية

PYTHON
import numpy as np

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

print(np.cumsum(a))   # [1  3  6 10 15]
print(np.cumprod(a))  # [1  2  6 24 120]

▶ مثال

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

: التجميع على المحاور لمصفوفة ثنائية الأبعاد (الصعوبة ⭐⭐)

PYTHON
import numpy as np

a = np.arange(12).reshape(3, 4)

print("axis=0 (عمودياً):")
print(f"  sum:  {a.sum(axis=0)}")
print(f"  mean: {a.mean(axis=0)}")
print(f"  max:  {a.max(axis=0)}")

print("axis=1 (صفياً):")
print(f"  sum:  {a.sum(axis=1)}")
print(f"  mean: {a.mean(axis=1)}")
print(f"  max:  {a.max(axis=1)}")

▶ مثال: التجميع الآمن مع NaN (الصعوبة ⭐⭐)

PYTHON
import numpy as np

data = np.array([1.0, 2.0, np.nan, 4.0, np.nan, 6.0])

print("Standard mean:", data.mean())
print("nanmean:", np.nanmean(data))
print("nansum:", np.nansum(data))
print("nanstd:", np.nanstd(data))
print("nanmin:", np.nanmin(data))
print("nanmax:", np.nanmax(data))

# عدد القيم غير NaN
print("Valid count:", np.sum(~np.isnan(data)))

المخرجات:

TEXT
Standard mean: nan
nanmean: 3.25
nansum: 13.0
nanstd: 1.9202864369672785
nanmin: 1.0
nanmax: 6.0
Valid count: 4

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

PYTHON
import numpy as np

# المجموع الجاري
sales = np.array([10, 15, 7, 20, 13])
cumulative = np.cumsum(sales)
print("Daily sales:", sales)
print("Cumulative:", cumulative)

# الضرب التراكمي
factors = np.array([1.1, 1.05, 0.98, 1.02])
growth = np.cumprod(factors)
print("Growth factors:", growth)

# مجموع تراكمي ثنائي الأبعاد
a = np.arange(12).reshape(3, 4)
print("Row-wise cumsum:\n", np.cumsum(a, axis=1))

المخرجات:

TEXT
Daily sales: [10 15  7 20 13]
Cumulative: [10 25 32 52 65]
Growth factors: [1.1     1.155   1.1319  1.154538]
Row-wise cumsum:
 [[ 0  1  3  6]
 [ 4  9 15 22]
 [ 8 17 27 38]]



❓ أسئلة شائعة

س ما الفرق بين a.sum() و np.sum(a)؟
ج لا فرق — هما نفس الطريقة. .sum() هي طريقة على كائن ndarray؛ np.sum(a) هي صيغة الدالة. استخدم ما يبدو أفضل في السياق.
س كيف أتعامل مع قيم NaN في التجميع؟
ج استخدم np.nanmean() و np.nansum() و np.nanstd() إلخ. هذه الدوال تتخطى قيم NaN تلقائياً. الدوال القياسية mean() و sum() تنشر NaN.
س ما هو keepdims؟
ج keepdims=True يحافظ على البعد المُختزل كحجم 1، مما يسهل البث. على سبيل المثال، .sum(axis=1, keepdims=True) تُرجع شكلاً (3, 1) بدلاً من (3,).

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ مصفوفة 4x4 من أعداد صحيحة عشوائية 0-100. احسب المجموع والمتوسط والأصغر والأكبر والانحراف المعياري للمصفوفة بأكملها. ثم احسب نفس الإحصائيات على طول كل محور.

  2. متوسط (الصعوبة ⭐⭐): أنشئ مصفوفة تحتوي على قيم NaN. احسب المتوسط مع وبدون الدوال الآمنة مع NaN. اشرح الفرق.

  3. متقدم (الصعوبة ⭐⭐⭐): ولّد مصفوفة 10,000x5 من بيانات عشوائية. احسب درجة z (التوحيد القياسي) لكل عمود باستخدام المتوسط والانحراف المعياري على أساس المحور. تحقق من أن كل عمود له متوسط ≈ 0 وانحراف معياري ≈ 1.

Web-Tutorial.com

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

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

100%