Python Programming

تخصيص فعّال للقوائم والمصفوفات مسبقاً في بايثون

Spread the love

تتميز قوائم بايثون بإعادة التخصيص الديناميكي، ولكن تخصيص الذاكرة مسبقًا يمكن أن يعزز الأداء، خاصةً مع مجموعات البيانات الكبيرة. تستعرض هذه المقالة تقنيات فعالة لتخصيص الذاكرة مسبقًا للقوائم وهياكل البيانات التسلسلية الأخرى.

محتويات

تخصيص الذاكرة مسبقًا لقوائم بايثون

في حين أن بايثون لا تدعم مباشرةً القوائم ذات الحجم المحدد مسبقًا مثل بعض اللغات الأخرى، إلا أنه يمكننا إنشاؤها بكفاءة باستخدام فهم القوائم أو عامل التشغيل *.

الطريقة الأولى: فهم القوائم

مثالية لإنشاء قوائم بحجم محدد مملوءة بقيمة واحدة متكررة:


size = 10
my_list = [0] * size  # قائمة من 10 أصفار
print(my_list)  # الناتج: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

my_list = [None] * size # قائمة من 10 قيم None
print(my_list) # الناتج: [None, None, None, None, None, None, None, None, None, None]

الطريقة الثانية: استخدام list() مع مُولّد

يوفر المرونة للمبادرات الأكثر تعقيدًا حيث يتطلب كل عنصر قيمة فريدة:


size = 5
my_list = list(range(size))  # يُنشئ [0, 1, 2, 3, 4]
print(my_list)

my_list = list(i**2 for i in range(size))  # يُنشئ [0, 1, 4, 9, 16]
print(my_list)

ملاحظة مهمة: يركز تخصيص الذاكرة مسبقًا بشكل أساسي على تحسين التعبئة الأولية عن طريق تقليل إعادة التخصيص. لا يزال إضافة عناصر تتجاوز الحجم الأولي يؤدي إلى إعادة التخصيص الديناميكي.

تخصيص الذاكرة مسبقًا لمصفوفات NumPy

تتميز مصفوفات NumPy بالتميز في الحسابات العددية ومجموعات البيانات الكبيرة. فهي تسمح بتحديد الحجم ونوع البيانات مباشرةً:


import numpy as np

size = 10
my_array = np.zeros(size, dtype=int)  # مصفوفة من 10 أصفار (أعداد صحيحة)
print(my_array)

my_array = np.empty(size, dtype=float)  # مصفوفة من 10 أعداد عشرية غير مُهيأة (استخدمها بحذر!)
print(my_array)

my_array = np.arange(size)  # مصفوفة [0, 1, 2, ..., 9]
print(my_array)

يوفر NumPy العديد من الوظائف لإنشاء مصفوفات ذات قيم أولية وأنواع بيانات مختلفة، مما يعزز كفاءة العمليات العددية بشكل كبير.

تخصيص الذاكرة مسبقًا باستخدام array.array

توفر وحدة array.array تخزينًا مضغوطًا للبيانات المتجانسة، ويتطلب تحديد نوع البيانات:


import array

size = 5
my_array = array.array('i', [0] * size)  # مصفوفة من 5 أعداد صحيحة مُهيأة إلى 0
print(my_array)

يحدد 'i' نوعًا صحيحًا ذي إشارة؛ راجع الوثائق للحصول على رموز الأنواع الأخرى.

اختيار بنية البيانات المناسبة

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

اترك تعليقاً

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