تقنية

where في القسمة المقنعة: هل يملأ موضع المقام الصفري؟

موضع يسمح قناعه بقسمة ستة على اثنين فيكتب ثلاثة وموضع يستبعد قسمة خمسة على صفر فيحفظ قيمة التهيئة
رسم أصلي لقاعدة معلنة؛ لا استدعاء مكتبة أو معالجة سجل حقيقي.

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

الخلاصة السريعة

لا؛ عند شرط False يحفظ divide قيمة out السابقة في ذلك الموضع، فلا يصبح الرقم الباقي نتيجة قسمة أو علامة غياب موحدة تلقائيا.

  • توضح NumPy أن divide يكتب النتيجة حيث where=True ويبقي قيمة out السابقة حيث False؛ ومع out=None قد تظل المواضع المستبعدة غير مهيأة. [1]
  • نؤلف بسطين 6 و 5 ومقامين 2 و 0 وقناعا يسمح بالأول فقط. مع out عشري مهيأ إلى[−99 ،−99] يصبح الناتج[3 ،−99]؛ ومع تهيئته[0 ، 0] يصبح[3 ، 0] وفق القاعدة.
  • القيمة 3 ناتجة من 6÷2 ، أما−99 أو 0 في الموضع الثاني فباقية من التهيئة، وليست قيمة 5÷0. لا نمحو القناع ثم ندعي أن كل موضع محسوب وصحيح.
  • نهيئ out ونحدد نوعه ومعنى القيمة البديلة ونحفظ صلاحية كل موضع. الأرقام أمثلة معلنة، وليست سياسة عامة للغياب أو مخرجات استدعاء نفذناه؛ لم ندرب نموذجا.

ما الذي يحكم الكتابة إلى الناتج؟

بحسب وثائق NumPy، تكتب divide نتيجة العملية في مواضع where=True، وتبقي القيمة الأصلية في out حيث الشرط False. إذا أنشئ out غير مهيأ مع out=None، تبقى تلك المواضع غير مهيأة. [1]

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

ونميز مصفوفة المدخل من مخزن الناتج out. قد يحتفظ مخزن الناتج بقيمة كتبناها قبل الحساب؛ لا نقرأ هذا الرقم بوصفه دليلا مستقلا على ما كان في المدخل.

كيف تختلف النتيجة باختلاف التهيئة؟

نؤلف قيمتين للبسط 6 و 5 ، وقيمتين للمقام 2 و 0. نعلن قناعا يجيز الموضع الأول ويستبعد الثاني، ونفترض مخزنين عشريين مهيأين:الأول يبدأ−99 في الموضعين، والثاني يبدأ 0 في الموضعين.

في الموضع الأول تستبدل القيمة السابقة بالنتيجة 6÷2=3. في الثاني يحتفظ كل مخزن بقيمته الأولية، فنحصل على[3 ،−99] في الأول و[3 ، 0] في الثاني. الأعداد مشتقة يدويا من القاعدة، لا نتائج تنفيذ مكتبة.

اختيار−99 هنا مجرد علامة تعليمية معلنة. قد تكون−99 قيمة عادية في بيانات أخرى، فلا نقترحها علامة آمنة لكل متغير. كما أن تهيئة 0 لا تمنح الصفر معنى قسمة صالحة في الموضع المستبعد.

موضع المثالالبسط والمقاميسمح القناع؟out الأول بعد القاعدةout الثاني بعد القاعدة
الأول6 و 2نعم33
الثاني5 و 0لاسالب 990

ما الذي نفقده إذا حذفنا القناع؟

إذا قرأنا[3 ، 0] وحده دون قائمة الشروط، قد نخلط الصفر الباقي من التهيئة بنتيجة محسوبة. في تمريننا نعرف أن الموضع الثاني لم يستبدل، وأن 5÷0 ليس الحساب الذي أنتج الرقم المخزن هناك.

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

ولا نستنتج أن استبعاد الموضع صحح المقام أو كشف سبب كونه صفرا. بقيت بيانات المصدر كما هي، وحددنا فقط ما الذي نكتبه في الناتج وفق الشرط. تفسير الصفر في المصدر سؤال آخر.

أي خطوات نثبتها قبل استعمال الناتج؟

نقترح تحديد شرط الحساب، وتهيئة out ونوعه المناسب قبل العملية، وتعريف القيمة البديلة وما يحفظ صلاحية المواضع. ثم نراجع مثالًا محسوبا وآخر مستبعدًا، ونقرأ النتيجة مع المدخل والقناع.

لا نستعمل موضعا غير مهيأ كأنه قياس أو رمز اختارته السياسة. وكذلك لا يكفي تغيير عرض−99 إلى فراغ لإثبات أن سجل صلاحية الموضع بقي محفوظا بعد التصدير؛ نراجع الملف الذي سيقرأه المسار اللاحق.

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

المصادر ومتابعة القراءة

  1. NumPy: divide — where and out (يفتح في نافذة جديدة)numpy.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.