NumPy: إنشاء المصفوفات
آخر تحديث: 2026-08-26
إنشاء المصفوفات
1. ما ستتعلمه
- ❶ الإنشاء من كائنات Python
- ❷ المتتاليات الرقمية (arange / linspace / logspace)
- ❸ المصفوفات المعبأة مسبقًا (zeros / ones / eye / full)
- ❹ توليد الأرقام العشوائية
- ❺ القراءة من الملفات
2. قصة
تشارلي يحتاج 100 زاوية موزعة بالتساوي من 0 إلى 2π. حلقة Python: 5 أسطر. np.linspace: سطر واحد.
linspace(0, 2*pi, 100)تعني "خذ 100 نقطة موزعة بالتساوي من 0 إلى 2π" — الكود هو التوثيق.
3. المفاهيم الأساسية
(1) الإنشاء من كائنات Python
الطريقة الأساسية — تحويل قوائم Python (أو القوائم المتداخلة) إلى مصفوفات NumPy:
import numpy as np
a = np.array([1, 2, 3]) # 1D من قائمة
b = np.array([[1, 2], [3, 4]]) # 2D من قائمة متداخلة
c = np.array([1, 2, 3], dtype=float) # تحديد dtype
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
مقارنة طرق الإنشاء
| الطريقة | الصيغة | مصدر الإدخال | الاستخدام النموذجي |
|---|---|---|---|
np.array |
np.array(obj) |
قائمة/مجموعة Python | تحويل بيانات موجودة |
np.arange |
np.arange(start, stop, step) |
نطاق رقمي | متتاليات صحيحة/عائمة |
np.linspace |
np.linspace(a, b, n) |
بداية، نهاية، عدد | عدد محدد من العناصر |
np.zeros |
np.zeros(shape) |
الشكل | تهيئة كلها أصفار |
np.ones |
np.ones(shape) |
الشكل | تهيئة كلها واحدات |
np.full |
np.full(shape, val) |
الشكل + قيمة التعبئة | تهيئة بأي قيمة |
np.random.rand |
np.random.rand(n) |
عدد العناصر | تهيئة عشوائية |
np.fromfunction |
np.fromfunction(fn, shape) |
دالة + شكل | توليد بمعادلة |
(2) المتتاليات الرقمية
arange
np.arange(5) # [0 1 2 3 4]
np.arange(1, 10, 2) # [1 3 5 7 9]
np.arange(0, 1, 0.3) # [0. 0.3 0.6 0.9]
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
linspace
np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]
np.linspace(0, 2*np.pi, 100) # 100 نقطة من 0 إلى 2pi
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
logspace
np.logspace(1, 3, 3) # [ 10. 100. 1000.] -- 10^1, 10^2, 10^3
np.logspace(0, 2, 5) # 5 نقاط من 10^0 إلى 10^2
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
arange vs linspace vs logspace
| الميزة | arange |
linspace |
logspace |
|---|---|---|---|
| التحكم | بداية، نهاية، خطوة | بداية، نهاية، عدد | بداية_أس، نهاية_أس، عدد |
| يشمل النهاية | لا | نعم | نعم |
| التباعد | خطي | خطي | لوغاريتمي |
| دقة الأعداد العائمة | قد تحتوي على أخطاء | دقيق | دقيق |
| الاستخدام النموذجي | فهارس صحيحة | عينات للرسم | مقاييس تردد/لوغاريتمية |
(3) المصفوفات المعبأة مسبقًا
np.zeros(3) # [0. 0. 0.]
np.zeros((2, 3)) # مصفوفة أصفار 2x3
np.ones((2, 2)) # 2x2 واحدات
np.eye(3) # مصفوفة هوية 3x3
np.full((2, 3), 7) # 2x3 معبأة بـ 7
np.empty((2, 2)) # 2x2 غير مهيأة (ليست أصفار!)
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
zeros vs empty vs full
| الدالة | القيمة الأولية | السرعة | الأمان | حالة الاستخدام |
|---|---|---|---|---|
zeros |
كلها أصفار | متوسطة | آمن | تحتاج قيمة أولية معروفة |
empty |
غير معرفة | سريعة | غير آمن | كتابة جميع العناصر فورًا |
full |
قيمة مخصصة | متوسطة | آمن | تحتاج قيمة أولية غير صفرية |
(4) إنشاء الأرقام العشوائية
np.random.rand(3) # 3 أعداد منتظمة [0, 1)
np.random.rand(2, 3) # 2x3 منتظمة
np.random.randn(3) # 3 أعداد طبيعية معيارية
np.random.randint(0, 10, 5) # 5 أعداد صحيحة في [0, 10)
np.random.seed(42) # تعيين البذرة لإعادة الإنتاج
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
مرجع سريع للدوال العشوائية
| الدالة | التوزيع | النطاق | نوع الإرجاع |
|---|---|---|---|
rand(d0, d1, ...) |
منتظم | [0, 1) | float |
randn(d0, d1, ...) |
طبيعي معياري | (-∞, +∞) | float |
randint(low, high, size) |
صحيح منتظم | [low, high) | int |
uniform(low, high, size) |
منتظم | [low, high) | float |
normal(loc, scale, size) |
طبيعي | (-∞, +∞) | float |
choice(a, size) |
منتظم متقطع | عناصر a | يعتمد |
(5) القراءة من الملفات
data = np.loadtxt('data.txt') # نص عادي
data = np.loadtxt('data.csv', delimiter=',') # CSV
data = np.genfromtxt('data.csv', delimiter=',', # معالجة القيم المفقودة
filling_values=0)
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
fromfunction — إنشاء مصفوفات بدالة الإحداثيات:
np.fromfunction(lambda i, j: i + j, (3, 3))
---
## 4. [[0. 1. 2.]
---
## 5. [1. 2. 3.]
---
## 6. [2. 3. 4.]]
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: arange vs linspace vs logspace (الصعوبة ⭐)
import numpy as np
---
## 7. arange: قائم على الخطوة
a = np.arange(0, 10, 2) # [0 2 4 6 8]
print("arange:", a)
---
## 8. linspace: قائم على العدد
b = np.linspace(0, 10, 6) # 6 نقاط: 0, 2, 4, 6, 8, 10
print("linspace:", b)
---
## 9. logspace: لوغاريتمي
c = np.logspace(1, 4, 4) # [10, 100, 1000, 10000]
print("logspace:", c)
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: zeros / ones / eye / full (الصعوبة ⭐)
import numpy as np
z = np.zeros((2, 3))
print("zeros:\n", z)
o = np.ones((3, 2))
print("ones:\n", o)
e = np.eye(4)
print("eye:\n", e)
f = np.full((2, 3), 9.0)
print("full:\n", f)
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: قائمة متداخلة إلى مصفوفة 2D (الصعوبة ⭐)
import numpy as np
data = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
a = np.array(data)
print("shape:", a.shape) # (3, 3)
print("dtype:", a.dtype) # int64
print("ndim:", a.ndim) # 2
print("array:\n", a)
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
▶ مثال
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
: توليد مصفوفة عشوائية (الصعوبة ⭐)
import numpy as np
np.random.seed(42)
print("rand(3):", np.random.rand(3))
print("randn(3):", np.random.randn(3))
print("randint(0,10,5):", np.random.randint(0, 10, 5))
print("uniform(0,1,3):", np.random.uniform(0, 1, 3))
print("normal(0,1,3):", np.random.normal(0, 1, 3))
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
10. جداول المقارنة
(1) طريقة الإنشاء حسب حالة الاستخدام
| الاحتياج | الطريقة | لماذا |
|---|---|---|
| تحويل بيانات موجودة | np.array(data) |
تحويل مباشر |
| متتالية صحيحة | np.arange(n) |
خفيف |
| متتالية عائمة دقيقة | np.linspace(a, b, n) |
عدد محدد |
| مصفوفة بقيمة ثابتة | np.full(shape, val) |
أي قيمة تعبئة |
| مصفوفة هوية | np.eye(n) |
جبر خطي |
| تهيئة عشوائية | np.random.rand(...) |
أوزان ML |
| تحميل من ملف | np.loadtxt(file) |
بيانات خارجية |
(2) arange مقابل Python range
| الميزة | range |
np.arange |
|---|---|---|
| الإرجاع | مكرر كسول | ndarray (محقق) |
| الذاكرة | O(1) | O(n) |
| خطوة عائمة | لا | نعم |
| السرعة (التكرار) | أبطأ | أسرع (متجه) |
| حالة الاستخدام | حلقات | إنشاء مصفوفات |
11. مخطط المبدأ
graph TB
A[قائمة Python] -->|np.array| B[ndarray]
C[arange / linspace] --> B
D[zeros / ones / eye] --> B
E[دوال عشوائية] --> B
F[ملف: loadtxt] --> B
B --> G[نوع موحد]
B --> H[ذاكرة متجاورة]
B --> I[عمليات متجهة]
❓ أسئلة شائعة
np.random.default_rng(seed) لإنشاء كائن Generator، ثم استدع .random()، .normal()، .integers()، إلخ. الطريقة القديمة np.random.seed() لا تزال تعمل لكنها تعتبر قديمة.np.array(x for x in range(10)) لا يعمل — ينشئ مصفوفة 0D تحتوي على كائن المولد. استخدم np.fromiter((x for x in range(10)), dtype=int) بدلاً من ذلك.np.genfromtxt('file.csv', delimiter=',', filling_values=0) لاستبدال القيم المفقودة بقيمة افتراضية، أو np.nan.📖 ملخص
np.array()يحول قوائم Python إلى ndarrays؛ يتم استنتاج dtype تلقائيًاarange(start, stop, step)ينشئ متتاليات موزعة بالتساوي؛linspaceيتحكم في العددzeros/ones/eye/fullتنشئ مصفوفات معبأة مسبقًا؛emptyأسرع لكن غير مهيأة- الدوال العشوائية:
rand(منتظم)،randn(طبيعي)،randint(صحيح)،choice(أخذ عينات) loadtxtوgenfromtxtتقرأ المصفوفات من ملفات نصية؛fromfunctionتولد بمعادلة
📝 تمارين
-
مبتدئ (الصعوبة ⭐): أنشئ المصفوفات التالية: (أ) أعداد صحيحة من 0 إلى 9، (ب) 10 نقاط موزعة بالتساوي من 0 إلى 1، (ج) مصفوفة هوية 3x3، (د) مصفوفة 2x4 كلها 7.
-
متوسط (الصعوبة ⭐⭐): استخدم
np.loadtxtلقراءة ملف CSV بـ 3 أعمدة: name (نص)، age (int)، salary (float). استخدمnp.genfromtxtمعdtype=Noneلمعالجة الأنواع المختلطة. اطبع متوسط الراتب. -
متقدم (الصعوبة ⭐⭐⭐): قارن أداء إنشاء 10 ملايين رقم عشوائي باستخدام
np.random.rand(10_000_000)مقابل إنشاء قائمة Python. سجل الفرق في الوقت والذاكرة. ثم استخدمnp.random.default_rng()وقارن السرعة.