علوم وفضاء

nan_to_num: هل posinf حد أعلى لكل القيم؟

الحالات الست ونتائج الاستدعاء الموثق.
رسم أصلي لنتيجة تشغيل محدد.

nan_to_num تستبدل الحالات غير المحدودة. [1] بقيت 9 في مثالنا.

حدد ما تستبدله

الوسيط nan لبديل NaN؛ وposinf للانهاية الموجبة، وneginf للسالبة. [1]

نرمز للانهايتين بـ+inf و−inf، وللحالة غير العددية بـNaN. [1]

قائمتنا المؤلفة [NaN,+inf,−inf,9,−9,0]. نحدد nan=−99 وposinf=7 وneginf=−7. هذه أعداد اخترناها، وليست حدود جهاز أو إحصاءً استخرجناه من بيانات. سنراجع كل موضع في الأصل وفي النتيجة.

قارن الحالات الست

شغّلنا np.nan_to_num(x,copy=True,nan=-99,posinf=7,neginf=-7) بعد إنشاء x بالقائمة المعلنة ونوع np.float64. الإصداران الفعليان NumPy 2.3.5 وCPython 3.12.14؛ الأعداد تعليمية، وليست قياسات تجربة مادية.

أعطى التشغيل [-99.0,7.0,-7.0,9.0,-9.0,0.0]. تغيرت المواضع الثلاثة الأولى فقط في مثالنا: NaN صارت −99، والموجبة 7، والسالبة −7.

القيمة 9 أكبر من 7 لكنها بقيت 9، و−9 أصغر من −7 لكنها بقيت −9. يكفي هذان التحكمان لرفض تفسير بديل اللانهاية في هذا الاستدعاء بوصفه حدًا عامًا لكل قيمة.

كذلك أصبحت NaN مساوية −99، وهو أقل من −7. إذن حتى القيم التي غُيرت لا يلزم أن تقع جميعها بين بديلَي اللانهاية؛ فقد حددنا بديل NaN بصورة مستقلة.

للمقارنة الورقية فقط، قاعدة قص العدد المحدود v إلى المجال [−7,7] هي min(max(v,−7),7). تعطي هذه القاعدة 7 عند v=9 و−7 عند v=−9، بخلاف النتيجة الفعلية لاستدعائنا. لم نشغّل clip في هذا الفحص، ولم نطبق القاعدة الورقية على NaN.

احفظ النسخة ومعنى البديل

copy=True يطلب إنشاء نسخة، وهو الافتراضي. [1]

في تشغيلنا بقي x[0] هو NaN بعد إنشاء الناتج، وظلت اللانهايتان في الأصل أيضًا. وقارنّا الأصل بنسخة محفوظة قبل الاستدعاء، مع مراعاة NaN في المقارنة؛ تحقق عدم تغييره في الحالات المختبرة.

فحص np.shares_memory بين الأصل والناتج أعطى False في المثال والحالات التي عددناها. هذا وصف للتشغيل ذي المصفوفة والنوع والإعداد المعلن؛ لم نختبر copy=False أو قواعد التحويل التي قد تحتاج نسخة أخرى.

نقترح حفظ الأصل وقائمة البدائل والإصدار، وبيان أن −99 و7 و−7 أعداد أُدخلت بقرارنا. لا نسمي −99 تقديرًا لقيمة غائبة، لأن برنامجنا لم يحسب إحصاءً أو يملك قياسًا لذلك الموضع.

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

9 و−9 تبقيان خارج المجال بين بديلَي اللانهاية.
مقارنة أصلية؛ لا ادعاء قص القيم.

راجع التشغيل وحدوده

أخذنا الأبجدية المختارة [NaN,+inf,−inf,−9,0,9]، وعددنا كل قوائمها ذات الأطوال 0 إلى 4. العدد 1+6+36+216+1296=1,555؛ القائمة الفارغة حالة واحدة.

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

صارت الفحوص 1,555×4=6,220، ومع ستة تحكمات مباشرة للقائمة المعروضة أصبح الإجمالي 6,226؛ جميعها مرت. ملف الفحص يحفظ الإصدار والنوع والإعدادات ونتيجة المثال.

اقتصرنا على float64 وبعد واحد وcopy=True وهذه البدائل العددية. لم نختبر الأعداد المركبة أو النوع الصحيح أو البدائل المصفوفية أو أكبر وأصغر قيمة افتراضية للانهاية، ولم نقس الزمن أو الذاكرة الكلية أو أثرًا على نموذج.

المدخل المؤلفناتج التشغيل
NaN−99
+inf7
−inf−7
99
−9−9
00

للتوسع: قص القيم المتطرفة.

المراجع

  1. NumPy 2.3 — nan_to_num

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