سمات المصفوفات وفحصها
استكشف السمات ndim وshape وsize وdtype، وتعلّم كيفية تغيير شكل مصفوفة باستخدام reshape().
سمات المصفوفات وفحصها درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
أهمية سمات المصفوفات
قبل العمل على مصفوفة، ستحتاج إلى معرفة shape وأبعادها و dtype الخاص بها. توفّر لك NumPy هذه المعلومات فورًا من خلال سمات خفيفة.
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print('ndim:', a.ndim) # 2
print('shape:', a.shape) # (2, 3)
print('size:', a.size) # 6
print('dtype:', a.dtype) # int64ndim: عدد الأبعاد
تخبرك ndim بعدد أبعاد المصفوفة: فالقائمة المسطحة بُعدها 1، وقائمة القوائم بُعدها 2، بينما تمتد tensors في تعلّم الآلة غالبًا إلى 3 أو 4 أبعاد.
import numpy as np
v = np.array([1, 2, 3])
print(v.ndim) # 1
m = np.zeros((4, 5))
print(m.ndim) # 2
t = np.ones((2, 3, 4))
print(t.ndim) # 3shape: صفيف أبعاد المصفوفة
تمثل shape صفيفًا يحتوي على حجم واحد لكل بُعد. وبالنسبة إلى مصفوفة ثنائية الأبعاد، يكون ذلك (rows, columns) — ويمكنك فك هذا الصفيف لكتابة كود مرن.
import numpy as np
a = np.arange(24).reshape(2, 3, 4)
print(a.shape) # (2, 3, 4)
n_rows, n_cols = np.zeros((5, 7)).shape
print(n_rows, n_cols) # 5 7size: العدد الإجمالي للعناصر
تعطيك size العدد الإجمالي للعناصر — أي حاصل ضرب جميع القيم في shape. وهذا مفيد للتأكد من أن reshape لم يفقد أي شيء.
import numpy as np
a = np.ones((3, 4, 5))
print(a.size) # 60 (3*4*5)
print(np.prod(a.shape))# 60
# Memory estimate in bytes
print(a.size * a.itemsize, 'bytes') # 480 bytesdtype: نوع بيانات العنصر
يصف dtype نوع كل عنصر، بينما تخبرك itemsize بحجمه بالبايت. يؤدي تحويل float64 إلى float32 إلى خفض استهلاك الذاكرة إلى النصف، وغالبًا إلى تنفيذ أسرع.
import numpy as np
a = np.array([1.5, 2.5, 3.5])
print(a.dtype) # float64
print(a.itemsize) # 8 bytes
b = a.astype(np.float32)
print(b.dtype) # float32
print(b.itemsize) # 4 bytesnbytes: إجمالي استهلاك الذاكرة
تمثل nbytes إجمالي ذاكرة المصفوفة بالبايت — أي size مضروبًا في itemsize. تحقّق منها قبل التحويل إلى نوع أصغر وبعده للتأكد من توفير المساحة فعلًا.
import numpy as np
a = np.ones((1000, 1000), dtype=np.float64)
print(a.nbytes) # 8000000 (8 MB)
b = a.astype(np.float32)
print(b.nbytes) # 4000000 (4 MB)reshape(): تغيير شكل المصفوفة
تمنح reshape المصفوفة شكلًا جديدًا من دون نسخ البيانات، ما دام عدد العناصر لم يتغير. مرّر -1 لتدع NumPy تحسب ذلك البُعد نيابةً عنك.
import numpy as np
a = np.arange(12)
print(a.shape) # (12,)
b = a.reshape(3, 4)
print(b.shape) # (3, 4)
c = a.reshape(2, -1) # -1 inferred as 6
print(c.shape) # (2, 6)التسطيح باستخدام ravel() و flatten()
يحوّل كل من ravel() و flatten() المصفوفة إلى بُعد واحد. والفرق هو أن ravel تشارك الذاكرة عادةً، من دون إنشاء نسخة، بينما تنشئ flatten نسخة جديدة دائمًا.
import numpy as np
m = np.array([[1, 2, 3], [4, 5, 6]])
r = m.ravel() # view (usually)
f = m.flatten() # always a copy
print(r) # [1 2 3 4 5 6]
print(f) # [1 2 3 4 5 6]تبديل أبعاد المصفوفات
تعطيك السمة .T عملية transpose — إذ تبدّل الصفوف والأعمدة. وهي مجانية، فلا تُنسخ البيانات، وأساسية لمواءمة المصفوفات.
import numpy as np
m = np.array([[1, 2, 3], [4, 5, 6]]) # shape (2, 3)
print(m.T.shape) # (3, 2)
print(m.T)
# [[1 4]
# [2 5]
# [3 6]]strides: تخطيط الذاكرة
توضح strides عدد البايتات التي تتقدم بها NumPy في الذاكرة لكل بُعد. ولهذا تكون عملية transpose مجانية — فهي تبدّل قيم stride فقط.
import numpy as np
a = np.ones((3, 4), dtype=np.float64)
print(a.strides) # (32, 8) — 4 cols x 8 bytes, 1 col x 8 bytes
b = a.T
print(b.strides) # (8, 32) — strides swapped, no data copyالتحقق من العروض والنسخ
يشارك view الذاكرة مع المصفوفة الأصلية، لذا يؤدي تغيير أحدهما إلى تغيير الآخر؛ أما النسخة فمستقلة. استخدم np.shares_memory(a, b) للتحقق مما لديك.
import numpy as np
a = np.arange(6)
b = a.reshape(2, 3) # view
print(np.shares_memory(a, b)) # True
c = a.copy()
print(np.shares_memory(a, c)) # Falseتحقق سريع
اختبر فهمك لسمات مصفوفات NumPy من هذا الدرس.
مراجعة الدرس
تقدم رائع! تصف ndim و shape و size البنية، بينما يصف dtype البيانات، ويُرجع reshape عرضًا، في حين تنسخ flatten البيانات دائمًا. التالي: العمليات الحسابية على المصفوفات.
الأسئلة الشائعة
هل درس «سمات المصفوفات وفحصها» مجاني؟
نعم — نص درس «سمات المصفوفات وفحصها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ماذا ستتعلم في «سمات المصفوفات وفحصها»؟
استكشف السمات ndim وshape وsize وdtype، وتعلّم كيفية تغيير شكل مصفوفة باستخدام reshape(). تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟
لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «سمات المصفوفات وفحصها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟
نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء مصفوفات NumPy
- سمات المصفوفات وفحصها
- الحسابات عنصرًا بعنصر
- تقطيع المصفوفات وفهرستها