NumPy: إنشاء المصفوفات

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

إنشاء المصفوفات

1. ما ستتعلمه




2. قصة

تشارلي يحتاج 100 زاوية موزعة بالتساوي من 0 إلى 2π. حلقة Python: 5 أسطر. np.linspace: سطر واحد.

linspace(0, 2*pi, 100) تعني "خذ 100 نقطة موزعة بالتساوي من 0 إلى 2π" — الكود هو التوثيق.




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

(1) الإنشاء من كائنات Python

الطريقة الأساسية — تحويل قوائم Python (أو القوائم المتداخلة) إلى مصفوفات NumPy:

PYTHON
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
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل 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

PYTHON
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]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

linspace

PYTHON
np.linspace(0, 1, 5)    # [0.   0.25 0.5  0.75 1.  ]
np.linspace(0, 2*np.pi, 100)  # 100 نقطة من 0 إلى 2pi
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

logspace

PYTHON
np.logspace(1, 3, 3)    # [  10.  100. 1000.]  -- 10^1, 10^2, 10^3
np.logspace(0, 2, 5)    # 5 نقاط من 10^0 إلى 10^2
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

arange vs linspace vs logspace

الميزة arange linspace logspace
التحكم بداية، نهاية، خطوة بداية، نهاية، عدد بداية_أس، نهاية_أس، عدد
يشمل النهاية لا نعم نعم
التباعد خطي خطي لوغاريتمي
دقة الأعداد العائمة قد تحتوي على أخطاء دقيق دقيق
الاستخدام النموذجي فهارس صحيحة عينات للرسم مقاييس تردد/لوغاريتمية

(3) المصفوفات المعبأة مسبقًا

PYTHON
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 غير مهيأة (ليست أصفار!)
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

zeros vs empty vs full

الدالة القيمة الأولية السرعة الأمان حالة الاستخدام
zeros كلها أصفار متوسطة آمن تحتاج قيمة أولية معروفة
empty غير معرفة سريعة غير آمن كتابة جميع العناصر فورًا
full قيمة مخصصة متوسطة آمن تحتاج قيمة أولية غير صفرية

(4) إنشاء الأرقام العشوائية

PYTHON
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)          # تعيين البذرة لإعادة الإنتاج
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل 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) القراءة من الملفات

PYTHON
data = np.loadtxt('data.txt')                    # نص عادي
data = np.loadtxt('data.csv', delimiter=',')     # CSV
data = np.genfromtxt('data.csv', delimiter=',',  # معالجة القيم المفقودة
                     filling_values=0)
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

fromfunction — إنشاء مصفوفات بدالة الإحداثيات:

PYTHON
np.fromfunction(lambda i, j: i + j, (3, 3))
---
## 4. [[0. 1. 2.]
---
##  5. [1. 2. 3.]
---
##  6. [2. 3. 4.]]
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

▶ مثال

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

: arange vs linspace vs logspace (الصعوبة ⭐)

PYTHON
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)
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.


▶ مثال

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

: zeros / ones / eye / full (الصعوبة ⭐)

PYTHON
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)
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.


▶ مثال

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

: قائمة متداخلة إلى مصفوفة 2D (الصعوبة ⭐)

PYTHON
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)
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.


▶ مثال

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

: توليد مصفوفة عشوائية (الصعوبة ⭐)

PYTHON
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))
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install numpy`) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.
⚠️ ملاحظة: الكود أدناه يحتاج إلى التشغيل في بيئة Python محلية.




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. مخطط المبدأ

100%
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[عمليات متجهة]



❓ أسئلة شائعة

س ما الفرق بين arange و linspace؟
ج arange يأخذ حجم الخطوة ولا يشمل قيمة النهاية. linspace يأخذ عددًا ويشمل كلا الطرفين. استخدم arange للمتتاليات الصحيحة، linspace عندما تحتاج عددًا محددًا من النقاط.
س هل empty() فارغة حقًا؟
ج لا — تخصص الذاكرة لكنها لا تهيئها. "القيم" هي ما كان في تلك الذاكرة سابقًا. إنها أسرع لكنها خطيرة. استخدمها فقط عندما تكون على وشك ملء كل عنصر.
س ما هي الطريقة الحديثة لتوليد الأرقام العشوائية؟
ج استخدم 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) بدلاً من ذلك.
س كيف أتعامل مع البيانات المفقودة عند تحميل CSV؟
ج استخدم np.genfromtxt('file.csv', delimiter=',', filling_values=0) لاستبدال القيم المفقودة بقيمة افتراضية، أو np.nan.

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ المصفوفات التالية: (أ) أعداد صحيحة من 0 إلى 9، (ب) 10 نقاط موزعة بالتساوي من 0 إلى 1، (ج) مصفوفة هوية 3x3، (د) مصفوفة 2x4 كلها 7.

  2. متوسط (الصعوبة ⭐⭐): استخدم np.loadtxt لقراءة ملف CSV بـ 3 أعمدة: name (نص)، age (int)، salary (float). استخدم np.genfromtxt مع dtype=None لمعالجة الأنواع المختلطة. اطبع متوسط الراتب.

  3. متقدم (الصعوبة ⭐⭐⭐): قارن أداء إنشاء 10 ملايين رقم عشوائي باستخدام np.random.rand(10_000_000) مقابل إنشاء قائمة Python. سجل الفرق في الوقت والذاكرة. ثم استخدم np.random.default_rng() وقارن السرعة.

Web-Tutorial.com

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

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

100%