تقنية

isposinf: لماذا يعود القناع بأصفار وآحاد؟

قناع موجب بنوعين.
قيم المصدر وأجوبة معلنة.

أعادت isposinf في تجربتنا قناعًا منطقيًا، ثم أعادت أصفارًا وآحادًا عندما مررنا مصفوفة int8 للإخراج. سنفصل نوع الجواب عن قيم المصدر، ونراجع ما كتب في المصفوفة الممررة.

حدد سؤال القناع ونوع الإخراج

تفحص isposinf اللانهاية الموجبة لكل عنصر؛ ويعطي out العددي أصفارًا وآحادًا ويعود الكائن الممرر نفسه. [1]

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

نسأل أي موضع يحمل اللانهاية الموجبة، ثم نسأل كيف يمثل الجواب في مصفوفة الإخراج. الرقم1 في القناع العددي يصف تحقق الشرط؛ لا يعني أن اللانهاية الأصلية أصبحت العدد1 داخل المصدر.

نميز بين نوع المصدر ونوع المخرج. المصدر في تجربتنا float64، ومصفوفة الإخراج الممررة int8. حفظ النوع مع القيم يتيح قراءة الأصفار والآحاد على أنها أجوبة للفحص، بدل نسبتها إلى بيانات المصدر.

قارن العودة المنطقية بالإخراج الصحيح

شغّلنا NumPy2.3.5 على CPython3.12.14. أنشأنا a=np.array([float("inf"),151.0,float("-inf"),-154.0,float("nan"),0.0],dtype="<f8"). الشكل(6,)؛ ترتيب المواضع من صفر إلى خمسة.

أعادت np.isposinf(a) القيم [True,False,False,False,False,False] بالنوع bool والشكل(6,). تحقق الشرط في الموضع الأول وحده؛ العدد151 موجب ومحدود، ولذلك لم يعط True.

ثم أنشأنا out=np.array([-7,-7,-7,-7,-7,-7],dtype=np.int8). هذه القيم الابتدائية اخترناها علامة واضحة على الكتابة؛ ليست بدائل نريد إدخالها إلى المصدر.

أعادت np.isposinf(a,out=out) القيم [1,0,0,0,0,0] بالنوع int8 والشكل(6,). فحص returned is out أعطى True؛ عاد كائن الإخراج الممرر نفسه، وكتبت النتيجة فوق العلامات الست.

تطابقت مواضع تحقق الشرط بين العودتين، لكن نوع العناصر اختلف. لا نسمي سجلات int8 قيمًا منطقية أصلية لمجرد أن1 يقابل True في هذا المثال؛ نحفظ ما أعاده كل نداء بالفعل.

الرسم الأول يعرض القيم المؤلفة بالترتيب، ثم صف الأجوبة المنطقية وصف الأعداد. الرموز +Inf و−Inf وNaN وصف للقيم العائمة الخاصة، وليست نصوصًا وضعتها المكتبة داخل المصدر.

احتفظ بالمصدر وافصل الإشارتين

بقيت بايتات a ونوعها وشكلها ثابتة بعد النداءات. ظلت اللانهاية الموجبة في الموضع الأول، والسالبة في الثالث، وNaN في الخامس. الكتابة التي رصدناها حدثت في مصفوفة out المعلنة.

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

تفحص isneginf اللانهاية السالبة لكل عنصر بجواب منطقي. [2] استعملناها للتحكم في الإشارة على المصدر نفسه دون تمرير out.

أعادت np.isneginf(a) القيم [False,False,True,False,False,False] بالنوع bool. تحقق الشرط في موضع اللانهاية السالبة، بينما بقي الموضع الأول False. لا يكفي وصف القيمة بأنها غير محدودة لتحديد أي الفحصين سيعطي True.

العدد−154 سالب ومحدود، فأعطى False في التحكم السالب كما أعطى151 False في الفحص الموجب. الصفر وNaN أعطيا False في الفحصين على هذا المصدر؛ لم نشغل فحصًا آخر لبناء هذه العودات.

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

الإخراج الصحيح والتحكم السالب.
علامة ابتدائية ونتائج الفحص.

عد القيم المسجلة وحدد نطاق الفحص

اخترنا n من151 إلى167، أي17 قيمة. لكل n أنشأنا المصدر [+Inf,n,−Inf,−n−3,NaN,0] من float64، ومصفوفة int8 ابتدائية بست قيم−7. توجد17 مصفوفة مصدر مختلفة بايتيًا؛ النمط الابتدائي للإخراج مكرر.

لكل مصدر ثلاثة نداءات: isposinf دون out، ثم isposinf مع out الصحيح، ثم isneginf دون out. المجموع17×3=51 نداءً، وكلها عادت بمصفوفة ناجحة. لا توجد أخطاء أو عودات مفردة في هذا السجل.

لدينا34 عودة bool، في كل منها ستة عناصر:34×6=204 قيمة منطقية. ولدينا17 عودة int8، في كل منها ستة عناصر:17×6=102 قيمة عددية. الإجمالي306 عناصر مسجلة في51 عودة، وليس306 قيمة متميزة أو51 تخصيصًا جديدًا.

بنى مرجع Python التوقع بمقارنة القيم المعلنة باللانهاية الموجبة أو السالبة قبل استيراد NumPy. وحول الجواب الموجب إلى0 أو1 للتوقع العددي، ثم تحقق من بايتات المصدر والإخراج باستعمال struct. لم تولد دوال الفحص المستهدفة نتائج المرجع.

طابقت جميع العودات التوقع، وعادت مصفوفة int8 الممررة نفسها في17 نداءً، وبقيت بايتات المصادر ثابتة. سجل JSON يحفظ الحالات الخاصة في المدخل بوسوم وصفية، والأجوبة المنطقية كقيم منطقية والأعداد كأعداد.

اقتصرنا على مصدر float64 من محور واحد بطول ستة، وإخراج int8 مستقل مطابق الشكل، والإعدادات المذكورة. لم نفحص المصدر المركب أو المفرد أو الفئات المشتقة أو تداخل الإخراج مع المصدر أو اختلاف الشكل أو البث أو أنواع أخرى أو الأداء أو إصدار آخر.

Own outputdtypeValues by position
Positive defaultboolT / F / F / F / F / F
Positive supplied outint81 / 0 / 0 / 0 / 0 / 0
Negative defaultboolF / F / T / F / F / F

للتوسع: قناع المحدودية.

المراجع

  1. NumPy isposinf
  2. NumPy isneginf

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