NumPy Tutorials

إتقان إعادة تشكيل وتغيير حجم مصفوفات NumPy

Spread the love

تُعدّ معالجة أشكال المصفوفات بكفاءة أمراً أساسياً لمعالجة البيانات بفعالية باستخدام NumPy. يتناول هذا البرنامج التعليمي وظيفتين أساسيتين لإعادة تشكيل وتغيير حجم مصفوفات NumPy: reshape() و resize(). سنستكشف وظائفهما، والاختلافات الدقيقة بينهما، وأفضل الممارسات لضمان قدرتك على استخدامها بثقة في مشاريع علم البيانات الخاصة بك.

جدول المحتويات

  1. numpy.reshape()
  2. ndarray.reshape()
  3. اعتبارات ذاكرة مشتركة
  4. numpy.resize()

1. numpy.reshape()

تُعدّ دالة numpy.reshape() أداة متعددة الاستخدامات لتعديل شكل مصفوفة NumPy دون تغيير بياناتها الأساسية. تتطلب المصفوفة والشكل الجديد المطلوب كمدخلات. ومن المهم أن يكون الشكل الجديد متوافقاً مع حجم المصفوفة الأصلية (يجب أن يظل العدد الإجمالي للعناصر دون تغيير).


import numpy as np

arr = np.arange(12)  # أنشئ مصفوفة [0, 1, 2, ..., 11]
print("المصفوفة الأصلية:n", arr)

reshaped_arr = np.reshape(arr, (3, 4))  # إعادة تشكيل إلى مصفوفة 3x4
print("nالمصفوفة المُعاد تشكيلها:n", reshaped_arr)

# استخدام -1 لحساب البعد تلقائياً
auto_reshape = np.reshape(arr, (-1, 3)) 
print("nالمصفوفة المُعاد تشكيلها تلقائياً:n", auto_reshape)

# معالجة الأخطاء للأشكال غير المتوافقة
try:
    invalid_reshape = np.reshape(arr, (2,7))
    print(invalid_reshape)
except ValueError as e:
    print(f"nخطأ: {e}")

2. ndarray.reshape()

توفر طريقة ndarray.reshape() نهجاً بديلاً، تعمل مباشرةً على كائن ndarray موجود. وظيفتها مطابقة لـ numpy.reshape()؛ والفرق الوحيد يكمن في طريقة الاستدعاء.


arr = np.arange(12)
reshaped_arr = arr.reshape((4, 3))  # استدعاء الطريقة
print("nالمصفوفة المُعاد تشكيلها (استدعاء الطريقة):n", reshaped_arr)

3. اعتبارات ذاكرة مشتركة

تعمل كل من numpy.reshape() و ndarray.reshape() بشكل عام في المكان. وهذا يعني أنها لا تُنشئ نسخة من بيانات المصفوفة؛ بل إنها تُعدّل عرض البيانات الأساسية. وهذا أمر فعال للغاية من حيث الذاكرة. تُنعكس التغييرات في المصفوفة المُعاد تشكيلها في الأصل، والعكس صحيح. ومع ذلك، يتطلب هذا أيضاً مراعاة دقيقة، خاصةً إذا كنت بحاجة إلى الحفاظ على محتويات المصفوفة الأصلية. لإنشاء نسخة، استخدم طريقة .copy():


arr = np.arange(12)
reshaped_arr = arr.reshape((3,4))
reshaped_arr[0,0] = 99 # يُعدّل المصفوفة الأصلية أيضاً!
print("nالمصفوفة الأصلية بعد تعديل إعادة التشكيل:n", arr)

arr = np.arange(12)
reshaped_arr_copy = arr.reshape((3,4)).copy() # أنشئ نسخة
reshaped_arr_copy[0,0] = 100 # يُعدّل النسخة فقط
print("nالمصفوفة الأصلية بعد تعديل النسخة:n", arr)

4. numpy.resize()

توفر دالة numpy.resize() القدرة على تغيير حجم المصفوفة، على عكس reshape()، التي تحافظ على العدد الإجمالي للعناصر. يمكن أن تُغيّر resize() عدد العناصر. إذا كان الحجم الجديد أكبر، فسيتم إضافة عناصر صفراً أو عناصر مُكرّرة إلى المصفوفة. وإذا كان أصغر، فسيتم اقتطاع العناصر. من المهم أن resize() *دائماً* تُعيد مصفوفة جديدة؛ فهي لا تُعدّل الأصل في المكان.


arr = np.arange(5)
resized_arr = np.resize(arr, (8,))  # تغيير الحجم إلى الطول 8
print("nالمصفوفة المُغيّر حجمها (مُضاف إليها أصفار):n", resized_arr)

resized_arr_2 = np.resize(arr,(2,)) # تغيير الحجم إلى الطول 2
print("nالمصفوفة المُغيّر حجمها (مُقتطع):n", resized_arr_2)

resized_arr_3 = np.resize(arr, (2,3)) # تغيير الحجم إلى 2x3، سيتم تكرار المصفوفة
print("nالمصفوفة المُغيّر حجمها (مُكرّرة):n", resized_arr_3)

يوفر هذا البرنامج التعليمي لمحة شاملة عن إعادة تشكيل وتغيير حجم مصفوفات NumPy. إتقان هذه التقنيات أمر حيوي لإتقان معالجة البيانات في الحوسبة العلمية وعلم البيانات.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *