NumPy: عمليات التجميع
آخر تحديث: 2026-10-11
1. ما ستتعلمه
- ❶ التجميعات الأساسية: sum, mean, std, var, min, max
- ❷ التجميع على أساس المحاور: الاختزال على طول أبعاد محددة
- ❸ الدوال الآمنة مع NaN: nanmean, nansum, nanstd
- ❹ العمليات التراكمية: cumsum, cumprod
- ❺ التجميع مقابل دوال Python المضمنة
2. قصة
تحتاج أليس إلى حساب المتوسط والحد الأقصى والانحراف المعياري لـ 10 ملايين قراءة استشعار. في Python، كانت ستكتب ثلاث حلقات — 15 ثانية. في NumPy: data.mean() و data.max() و data.std() — 0.05 ثانية إجمالاً. "التجميع في NumPy ليس أسرع فحسب — إنه نموذج مختلف. استدعاء دالة واحد، تنفيذ على مستوى C، بدون حلقة Python."
3. المفاهيم الأساسية
(1) التجميعات الأساسية
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)
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
(2) التجميع على أساس المحاور
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
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
(3) الدوال الآمنة مع NaN
البيانات الواقعية غالباً ما تحتوي على قيم NaN. التجميعات القياسية تنشر NaN:
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
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
(4) العمليات التراكمية
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]
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: التجميع على المحاور لمصفوفة ثنائية الأبعاد (الصعوبة ⭐⭐)
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 (الصعوبة ⭐⭐)
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)))
المخرجات:
TEXTStandard mean: nan nanmean: 3.25 nansum: 13.0 nanstd: 1.9202864369672785 nanmin: 1.0 nanmax: 6.0 Valid count: 4
▶ مثال: العمليات التراكمية (الصعوبة ⭐)
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))
المخرجات:
TEXTDaily 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]]
❓ أسئلة شائعة
📖 ملخص
- التجميعات الأساسية: sum, mean, std, var, min, max, argmin, argmax, ptp
- معامل axis يتحكم في أي بُعد يتم الاختزال؛ keepdims يحافظ على الأبعاد
- الدوال الآمنة مع NaN: nanmean, nansum, nanstd, nanmin, nanmax
- التراكمي: cumsum, cumprod للمجموعات والمنتجات الجارية
📝 تمارين
-
مبتدئ (الصعوبة ⭐): أنشئ مصفوفة 4x4 من أعداد صحيحة عشوائية 0-100. احسب المجموع والمتوسط والأصغر والأكبر والانحراف المعياري للمصفوفة بأكملها. ثم احسب نفس الإحصائيات على طول كل محور.
-
متوسط (الصعوبة ⭐⭐): أنشئ مصفوفة تحتوي على قيم NaN. احسب المتوسط مع وبدون الدوال الآمنة مع NaN. اشرح الفرق.
-
متقدم (الصعوبة ⭐⭐⭐): ولّد مصفوفة 10,000x5 من بيانات عشوائية. احسب درجة z (التوحيد القياسي) لكل عمود باستخدام المتوسط والانحراف المعياري على أساس المحور. تحقق من أن كل عمود له متوسط ≈ 0 وانحراف معياري ≈ 1.