احسب أقصى طول من الأصفار المتتالية في كل صف
تعد البرمجة بلغة بايثون من المهارات الأساسية التي تسهم في تطوير الحلول البرمجية المتقدمة. واحدة من هذه الحلول التي قد يبحث عنها المبرمجون هي كيفية حساب الحد الأقصى لطول الأصفار المتتالية في كل صف داخل مصفوفة. في هذه المقالة، سنستعرض طريقة فعالة باستخدام مكتبة NumPy، والتي تسهل التعامل مع البيانات بشكل مريح وسريع.
أهمية استخدام مكتبة NumPy
تعتبر مكتبة NumPy من الأدوات الأساسية في علم البيانات والبرمجة بلغة بايثون. تمكن هذه المكتبة المستخدمين من إجراء العمليات الحسابية على المصفوفات الثنائية والثلاثية وغيرها بكفاءة عالية. عند التعامل مع مصفوفات تحتوي على بيانات، قد نحتاج في أحيان كثيرة إلى إيجاد معلومات محددة، كالعثور على أطول سلسلة من الأصفار المتتالية.
خطوات إيجاد أطول سلسلة من الأصفار المتتالية
للقيام بذلك، سنقوم أولاً بتمثيل بياناتنا في مصفوفة باستخدام NumPy. إليكم كيفية تنفيذ هذا الحل خطوة بخطوة. نبدأ أولاً باستيراد المكتبة:
import numpy as np
ثم نقوم بإنشاء مصفوفة تحتوي على البيانات التي نريد تحليلها:
arr = np.array([[0, 1, 0, 0, 0, 1],
[0, 0, 1, 0, 1, 0],
[1, 0, 0, 0, 0, 0]])
بعد ذلك، نقوم بعكس القيم، بحيث تتحول الأصفار إلى الواحدات والعكس بالعكس:
arr_eq0 = arr ^ 1
باستخدام هذه المعطيات، نقوم بحساب العدد التراكمي للأصفار المتتالية، والذي سيساعدنا في تحديد الأطوال:
cum0s = arr_eq0.cumsum(axis=1)
تظهر النتيجة كما يلي:
array([[1, 1, 2, 3, 4, 4],
[1, 2, 2, 3, 3, 4],
[0, 1, 2, 3, 4, 5]])
معالجة البيانات للوصول إلى النتيجة المطلوبة
لكي نحسب عدد الأصفار المتراكمة، نحتاج إلى الخطوة التالية وهي مضاعفة العدد التراكمي للأصفار بالعودة إلى مصفوفة الأصفار الأصلية:
cum_steps = cum0s * arr
الآن نحصل على مصفوفة تظهر كالتالي:
array([[0, 1, 0, 0, 0, 4],
[0, 0, 2, 0, 3, 0],
[0, 0, 0, 0, 0, 0]])
نقوم بعد ذلك بتطبيق عملية التجميع العمودية باستخدام الدالة np.maximum.accumulate
للعثور على الحد الأقصى من الأصفار المتتالية:
cum_steps = np.maximum.accumulate(cum_steps, axis=1)
النتيجة النهائية تكون بهذا الشكل:
array([[0, 1, 1, 1, 1, 4],
[0, 0, 2, 2, 3, 3],
[0, 0, 0, 0, 0, 0]])
الخطوة الأخيرة هي حساب الفرق بين العدد التراكمي للأصفار والمصفوفة المعدلة، ومن ثم احتساب الحد الأقصى للأصفار المتتالية في كل صف:
result = (cum0s - cum_steps).max(axis=1)
وبذلك نحصل على النتائج النهائية، التي توضح أطول سلسلة من الأصفار المتتالية في كل صف:
array([3, 2, 5])
تجميع كل الخطوات في دالة واحدة
يمكننا تسهيل استخدام هذه الخوارزمية من خلال تعريفها داخل دالة. إليكم كيف يتم تعريف هذه الدالة:
def Long_zero_run(arr):
arr_eq0 = arr ^ 1
cum0s = arr_eq0.cumsum(axis=1)
cum_steps = np.maximum.accumulate(cum0s * arr, axis=1)
return (cum0s - cum_steps).max(axis=1)
بتطبيق هذه الدالة على مصفوفة مشابهة، يمكن أن نحصل بشكل سريع ودقيق على أطول سلسلة من الأصفار المتتالية في كل صف.
بهذه الطريقة، نكون قد استعرضنا كيفية استخدام بايثون مع مكتبة NumPy للقيام بتحليل بسيط ولكنه مهم للبيانات. إن القدرة على حساب الحد الأقصى لطول الأصفار المتتالية في الصفوف يمكن أن تكون مفيدة في العديد من المجالات، بما في ذلك تحليل البيانات، الذكاء الصناعي، وتعلم الآلة.