اخترنا أربعة أعداد وقناعين يتداخلان في موضع واحد، وأعطينا كل قناع ثابتًا مختلفًا. ظهر 9 في الموضع المشترك؛ وبعد نقل زوجَي القناع والثابت كاملين ظهر 5. نتابع التعيين الباقي والخانة التي لا يغطيها أي قناع.
تعيينات متتابعة
تقبل piecewise أزواج شروط وثوابت. التنفيذ المثبت يكتب التعيينات بترتيب تلك الأزواج؛ نختبر أثر تداخلها. [1] [2]
نحفظ في المثال اسم كل قناع وثابته وموقع زوجه في القائمة. عند التداخل سنقارن القيمة الباقية بتوقع مؤلف يأخذ أول مطابقة؛ لا نفترض أن اسم piecewise يمنحنا تلك السياسة.
الاختبار هنا لطلب معين في NumPy 2.3.5. لم نعرّف اقترانًا رياضيًا بقواعد متعارضة ثم نزعم أن كل كتابة رياضية تحل التعارض مثل المكتبة. الأقنعة والثوابت وإعداد الطلب هي ما نراجعه.
موضع مشترك
شغّلنا NumPy 2.3.5 على CPython 3.12.14. كتبنا x=np.array([-2,1,4,7],dtype=np.int64). القناع C1 هو [False,True,True,False]، والقناع C2 هو [True,True,False,False]؛ شكل كل واحد (4,) مثل x.
قرنّا C1 بالثابت 5، وC2 بالثابت 9. طلب np.piecewise(x,[C1,C2],[5,9]) أعاد [9,9,5,0]، من int64 وبالشكل (4,). الأعداد والأقنعة من إعدادنا، وليست بيانات مقيسة أو مثالًا من الوثائق.
عند -2 يطابق C2 وحده فظهر 9؛ وعند 4 يطابق C1 وحده فظهر 5. عند 1 يطابق القناعان معًا، وبقي 9 في النتيجة. أما 7 فلا يطابق أيًا منهما، وكانت خانته صفرًا في هذا الطلب.
كتبنا للمقارنة سياسة Python مؤلفة: إن طابق C1 خذ 5، وإلا إن طابق C2 خذ 9، وإلا خذ صفرًا. تعطي [9,5,5,0]، فتخالف النتيجة المسجلة في الموضع المشترك. لا نسمي هذه السياسة تشغيلًا لـselect أو where.
الرقم 1 هنا عنصر من x وليس ترتيب القاعدة الفائزة. كذلك 9 ثابت اخترناه، وليس قيمة أخذناها من المدخل. نراجع رقم الموضع وقناعَه وثابتَه قبل تفسير المخرج.
نقل الزوج والبديل
طلبنا np.piecewise(x,[C2,C1],[9,5]). نقلنا القناع مع ثابته؛ C2 ما زال يقترن بـ9 وC1 بـ5. أعاد التشغيل [9,5,5,0] من int64 وبالشكل (4,).
بقي -2 عند 9 وبقي 4 عند 5، لأن لكل منهما قناعًا مطابقًا واحدًا. تغيرت خانة 1 من 9 إلى 5، وهي الخانة التي يطابق فيها القناعان. لم نبدل الثابتين مع إبقاء الأقنعة في مواضعها، ولم نغير القيم الأصلية.
نعود إلى ترتيب C1 ثم C2 ونضيف ثابتًا ثالثًا: np.piecewise(x,[C1,C2],[5,9,-3]). سجلنا [9,9,5,-3]. الخانة التي تحمل 7 هي التي تغيرت؛ لم يحل -3 محل أي ثابت في موضع مغطى.
تستعمل الدالة العنصر الإضافي عندما تكون جميع الشروط كاذبة. [1] وفي التنفيذ يُبنى قناعه من نفي وجود أي مطابقة. [2]
لذلك لا نعالج أولوية التداخل بتغيير البديل في هذا المثال. نراجع ترتيب الأزواج نفسه، ثم نراجع البديل للخانات غير المغطاة. هذان تعديلان منفصلان أظهرت لهما سجلاتنا أثرين مختلفين.

الشبكة والمرجع
للشبكة ثبتنا x عند [-2,1,4]. للقناع ذي المواضع الثلاثة 2**3=8 إمكانات منطقية؛ لكل زوج قناعين 8×8=64 تركيبًا. تشمل التركيبات قناعَين كاذبين تمامًا، أو متطابقين، أو منفصلين، أو متداخلين جزئيًا.
لكل تركيب جربنا زوج الثوابت [5,9] ثم [-1,3] ثم [0,7]. الثابتان مختلفان في كل زوج، فتظهر نتيجة نقل الزوجين حيث توجد مطابقة مشتركة. العدد 64×3=192 حالة شبكة؛ أضفنا المثال ذا المواضع الأربعة فصار الإجمالي 193.
بنى مرجع Python القيمة لكل موضع بشجرة قرار تبدأ بفحص القناع الثاني، ثم الأول، ثم البديل. هذا حساب مستقل عن حلقة التعيين في NumPy، ولا يستدعي piecewise لإنتاج التوقع. للترتيب المعكوس عكسنا القناعين والثابتين معًا في المرجع أيضًا.
لكل حالة ثلاث مجموعات: الطلب بالترتيب الأصلي أمام مرجعه؛ الطلب بعكس الزوجين أمام مرجعه؛ والطلب بالبديل الصريح -3 أمام مرجعه. قارنا القيم والشكل والنوع في كل مخرج. مرت 193×3=579 مجموعة، مع ثلاثة نداءات للدالة في الحالة وإجمالي 579 نداءً.
راجعنا كذلك أن اختلاف النتيجتين الأصليتين يقع بالضبط حيث القناعان True معًا، وأن بايتات المدخل والأقنعة بقيت كما هي. وجود الثابت صفرًا في أحد الأزواج لم يجعل خانة مغطاة خانة غير مغطاة؛ المرجع يرجع إلى القناع نفسه.
اقتصرنا على مدخل int64 أحادي البعد غير فارغ، وقناعين منطقيين بالشكل نفسه، وثوابت صحيحة صغيرة. لم نستعمل دوالًا قابلة للاستدعاء أو بثًا أو أنواعًا أخرى أو قيمًا غير منتهية أو مدخلًا فارغًا أو أبعادًا أعلى أو مصفوفات مقنعة. لم نقس الأداء أو توقيت تقييم الدوال، ولم نشغّل إصدارًا أقدم.
عند نقل نتيجة هذه التجربة احفظ أزواج القناع والثابت بالترتيب، لا قوائم الأقنعة وحدها. شاهدنا أثر التداخل وأثر البديل في طلبين منفصلين؛ فلا ننقل توقع أول مطابقة إلى هذا المسار دون فحص.
| الطلب | الناتج | الموضع المشترك |
|---|---|---|
| C1/5 then C2/9 | [9,9,5,0] | 9 |
| C2/9 then C1/5 | [9,5,5,0] | 5 |
| Original + default -3 | [9,9,5,-3] | 9 |
للتوسع: تركيب ReLU.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
