NumPy: عمليات التجميع
آخر تحديث: 2026-08-26
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) التجميعات الأساسية
`python import numpy as np
a = np.مصفوفة([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) `
` ext
المخرجات: قم بتشغيل 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]]
6. المجموع على طول المحور 0 (عمودياً)
print(a.sum(axis=0)) # [12 15 18 21]
7. المجموع على طول المحور 1 (صفياً)
print(a.sum(axis=1)) # [6 22 38]
8. المجموع الكلي
print(a.sum()) # 66 `
` ext
المخرجات: قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية. ` ⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.
(3) الدوال الآمنة مع NaN
البيانات الواقعية غالباً ما تحتوي على قيم NaN. التجميعات القياسية تنشر NaN:
`python import numpy as np
a = np.مصفوفة([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 `
` ext
المخرجات: قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية. ` ⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.
(4) العمليات التراكمية
`python import numpy as np
a = np.مصفوفة([1, 2, 3, 4, 5])
print(np.cumsum(a)) # [1 3 6 10 15] print(np.cumprod(a)) # [1 2 6 24 120] `
▶ مثال
` ext
المخرجات: قم بتشغيل 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.مصفوفة([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))
9. عدد القيم غير NaN
print("Valid count:", np.sum(~np.isnan(data))) `
المخرجات:
ext 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
10. المجموع الجاري
sales = np.مصفوفة([10, 15, 7, 20, 13]) cumulative = np.cumsum(sales) print("Daily sales:", sales) print("Cumulative:", cumulative)
11. الضرب التراكمي
factors = np.مصفوفة([1.1, 1.05, 0.98, 1.02]) growth = np.cumprod(factors) print("Growth factors:", growth)
12. مجموع تراكمي ثنائي الأبعاد
a = np.arange(12).reshape(3, 4) print("Row-wise cumsum:\n", np.cumsum(a, axis=1)) `
المخرجات:
ext 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]]
❓ أسئلة شائعة
📖 ملخص
- التجميعات الأساسية: 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.