نقارن مخرجات مصفوفتين مع NaN. [1] [2]
افصل معنى الاستدعاءين
العمليتان تقارنان عنصرًا بعنصر؛ fmin تتجاوز NaN عند شريك عددي، وminimum تنقلها. عند NaN في الطرفين تبقى NaN. [1] [2]
نقارن مصفوفتين متساويتَي الشكل، ولا نختزل المصفوفة إلى أصغر عدد واحد. نحتفظ بخمسة مواضع لنرى أين اتفق الخرجان وأين اختلفا.
الأعداد أمثلة مؤلفة. لا نسند NaN إلى سبب تسجيل أو تجربة مجهولة، ولا نفترض أن تجاوزها في عملية حسابية يكشف قيمة أصلية لم نملكها.
اقرأ الأزواج الخمسة
أنشأنا x=np.array([-4,np.nan,8,np.nan,np.nan],dtype=np.float64) وy=np.array([3,5,np.nan,np.nan,-7],dtype=np.float64). الإصداران NumPy 2.3.5 وCPython 3.12.14؛ شكل كل مدخل (5,). لم نحدد out أو where.
أعاد np.fmin(x,y) القيم [-4.0,5.0,8.0,NaN,-7.0]، بنوع float64 وشكل (5,). وأعاد np.minimum(x,y) القيم [-4.0,NaN,NaN,NaN,NaN] بالنوع والشكل نفسيهما.
الزوج الأول −4 و3 أعطى −4 في الاستدعاءين. في الزوج الثاني NaN و5 أعطت fmin العدد 5، بينما بقي خرج minimum هو NaN. في الثالث 8 وNaN أبقت fmin العدد 8.
الرابع NaN وNaN أعطى NaN في التشغيلين؛ لم يظهر صفر أو عدد آخر. الخامس NaN و−7 أعطى −7 في fmin، فالشريك الذي بقي ليس بالضرورة موجبًا.
شغّلنا الاستدعاءين أيضًا بعد تبديل ترتيب المصفوفتين. تطابقت القيم عددياً وتصنيفات NaN في المثال؛ لم نفحص أي تمثيل بتي لـNaN يحدد من أي طرف جاءت.
راجع القناع والتحكم الصفري
أعطى np.isnan على خرج fmin القناع [False,False,False,True,False]، وعلى خرج minimum القناع [False,True,True,True,True]. نستخدم هذه النتائج المسجلة لتحديد مواضع NaN، لا بوصفها اختبار صحة للقياسات.
ظل عدد عناصر كل خرج خمسة؛ الموضع الرابع ظل موجودًا وفيه NaN في الحالتين. لا تصف اختيار الشريك العددي هنا بأنه حذف صف أو تقليص طول المصفوفة.
في تحكم منفصل أنشأنا نسخة لكل مدخل، وأدخلنا 0.0 في موضع كل NaN عبر تفرع Python صريح. النسختان صارتا [-4,0,8,0,0] و[3,5,0,0,-7]. لم نستعمل nan_to_num في هذا التحكم.
أعاد np.minimum على النسختين [-4,0,0,0,-7] بنوع float64 وشكل (5,). في الموضعين الثاني والثالث فاز الصفر الذي أدخلناه على العددين 5 و8، بخلاف خرج fmin على الأصل.
وفي الموضع الرابع ظهر الصفر لأننا كتبناه في الطرفين. إنه ناتج لمدخلات جديدة، وليس رقمًا اكتشفته العملية داخل زوج NaN وNaN الأصلي.
لم نحسب إحصاء تعويض ولم نختبر نموذجًا أو سياسة بيانات. احتفظ بالأصل وقرار إدخال الصفر حين تصف هذا التحكم؛ اختلاف المخرجات واضح دون الادعاء أن البديل يعيد قياسًا غائبًا.

افحص شبكة محددة
عددنا القيم k/4 حيث k من −16 إلى 16 شاملًا الطرفين؛ هذه 33 قيمة من −4 إلى 4. أضفنا NaN فصار لدينا 34 اختيارًا، و34×34=1156 زوجًا مرتبًا.
مرجعنا يختبر math.isnan للطرفين: يتجاوز NaN لفرع fmin إن أمكن، وينقلها لفرع minimum؛ وإلا يختار الأصغر بالمقارنة <. [1] [2]
لا يستدعي المرجع fmin أو minimum أو اختزال NaN في NumPy، ولا min أو max في Python. نقارن القيم العددية بالمساواة، ونقبل NaN مقابل NaN بتصنيفها؛ لا نستعمل مساواة NaN العادية لإثبات التطابق.
لكل زوج أربعة فحوص للمخرجات: fmin وminimum بالترتيب الأصلي وبالترتيب المعكوس، مع النوع float64 والشكل (1,). والفحص الخامس يقارن بايتات المدخلين بما حفظناه قبل الاستدعاءات.
أضفنا ستة تحكمات للمثال الخماسي: الخرجان، والتبديل، وثبات الأصلين، والتحكم الصفري، والقناعان. الإجمالي 1156×5+6=5786، ومرت جميع الفحوص.
لم نفحص اللانهاية أو الأعداد المركبة أو الأنواع الأخرى أو المدخلات المفردة، ولا جميع الأعداد الحقيقية. واستبعدنا اختلاف الأشكال وخيارات الإخراج ومشاركة الذاكرة والأداء.
الصفر في الشبكة مقارن عدديًا؛ لم نفحص بت إشارته. ولم نفحص بتات NaN أو أصلها بين الطرفين. النتيجة تدعم القيم والأنواع المسجلة ضمن هذا النطاق، لا قواعد تمثيل كل حالة خاصة.
| x / float64 | y / float64 | fmin / float64 | minimum / float64 |
|---|---|---|---|
| −4 | 3 | −4 | −4 |
| NaN | 5 | 5 | NaN |
| 8 | NaN | 8 | NaN |
| NaN | NaN | NaN | NaN |
| NaN | −7 | −7 | NaN |
للتوسع: مئين مع NaN.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
