علوم وفضاء

histogram_bin_edges: هل تتجاهل auto الأوزان أم ترفض الطلب؟

أسماء المقدرات مع الأوزان مرفوضة، وعدد الفئات الصريح مقبول.
الاختيار التلقائي والعدد الصريح طلبان مختلفان.

اخترنا ثلاث قيم وثلاثة أوزان، ثم طلبنا حواف الفئات بأسماء مقدرات محددة وعدد فئات صريح. نتابع الطلب الذي توقف باستثناء، ونقارن العد الموزون بالعد الخام حين تثبت الحواف.

عدم الدعم ليس تجاهلًا صامتًا

تصف الوثائق اختيار حجم الفئات التلقائي بأنه غير داعم للبيانات الموزونة. [1]

في التنفيذ المحدد، يرفع مسار اسم المقدّر الصحيح TypeError إذا كانت weights غير None، قبل تشغيل المقدّر. [2]

لذلك نميز بين طلب يعيد نتيجة وطلب يتوقف باستثناء. لا نكتب نتيجة مفترضة للطلب المتوقف، ولا نقول إنه اختار الحواف من القيم وحدها في تجربتنا.

سنجرب عدد فئات صريحًا في طلب آخر. نجاح ذلك الطلب لا يمحو فشل اسم المقدّر؛ لكل فرع إعداداته التي سنحفظها في البطاقة.

ثلاث قيم وثلاثة أوزان

شغّلنا NumPy 2.3.5 على CPython 3.12.14. أنشأنا a=np.array([0.5,1.5,3.5],dtype=np.float64) وw=np.array([2,5,7],dtype=np.float64). الأعداد مؤلفة وليست قياسات أو أمثلة من المصدر.

استدعينا np.histogram_bin_edges(a,bins='auto',range=(0,4),weights=w). رفع الطلب TypeError. لم نحفظ مصفوفة حواف من هذا النداء، فلا نعرض شكلًا أو عددًا لفئاته.

أعدنا المقارنة بإعداد bins='fd' ثم bins='sturges'، مع a وw والمدى نفسيها. رفع كل طلب TypeError أيضًا. هذه ثلاثة أسماء اختبرناها؛ لا نزعم تنفيذ كل مقدّر في المكتبة.

الأوزان لها الشكل (3,) مثل القيم. لم نجعل الفشل تجربة لاختلاف الأطوال، ولم نمرر وزنًا سالبًا أو غير منتهٍ. نراجع اسم الخيار الذي غيرناه قبل نسب الاستثناء إلى خاصية أخرى.

حواف ثابتة ثم عد موزون

طلبنا ew=np.histogram_bin_edges(a,bins=2,range=(0,4),weights=w). عاد [0,2,4] من float64 وبالشكل (3,). في طلب en نفسه دون weights عادت الحواف نفسها.

ثبتنا عدد فئات يساوي اثنين ومدى طوله 4؛ في مرجعنا عرض كل فئة 4/2=2. الحواف صفر ثم اثنان ثم أربعة. ثلاث حواف تحدد فئتين؛ ليست ثلاث مشاهدات جديدة.

استدعينا np.histogram(a,bins=ew,weights=w,density=False). عاد العد الموزون [7,7] من float64. القيمتان 0.5 و1.5 في الأولى فتجمعان وزنيهما 2+5=7؛ القيمة 3.5 في الثانية بوزن 7.

استدعينا np.histogram(a,bins=en,density=False) دون الأوزان. عاد [2,1] من int64: ظهوران في الأولى وظهور واحد في الثانية. المجموع 3 عدد قيم قائمتنا؛ مجموع العد الموزون 14 يوافق 2+5+7.

في الشبكة، استعملنا القيم نفسها أيضًا مع أوزان [1,1,1]؛ صار العد الموزون [2,1]. ومع أوزان [0,0,0] صار [0,0]، مع بقاء الحواف الثابتة. ومع كل قائمة أوزان منهما بقيت طلبات الأسماء الثلاثة مرفوضة في التشغيل.

إذن لم نفقد الأوزان في عملية العد اللاحقة لمجرد أن اختيار bins='auto' لم يقبلها. انتقلنا إلى حواف حددنا عددها صراحة، ثم حسبنا داخلها مقادير أخرى غير عدد مرات الظهور. لا نحول المقادير المؤلفة إلى احتمالات أو كثافات.

عد موزون 7 و7 مقابل عد ظهور 2 و1.
الحواف نفسها؛ الأوزان تدخل العد اللاحق.

مرجع الفئات وحدود الأدلة

حسب مرجع Python العدد الخام بجمع مرات وقوع القيمة داخل كل فترة، والعد الموزون بجمع الوزن المقترن بكل قيمة داخلة. قيمنا كلها إما أكبر من 0 وأقل من 2، أو أكبر من 2 وأقل من 4؛ لم نحتج قاعدة لعضوية طرف.

كتبنا الحواف المتوقعة للفئتين الصريحتين قبل النداء. لم نستدع دالة فئات أو مقدّرًا من NumPy لإنتاج العد المرجعي. أما TypeError فهو نتيجة شاهدناها؛ لم ندع بناء مرجع عددي لحواف تقدير تلقائي.

للشبكة، أخذنا كل قائمة من ثلاثة عناصر بالقيم 0.5 و1.5 و2.5 و3.5، وكل قائمة أوزان من ثلاثة عناصر بالقيم 0 و1 و3. العدد 4**3×3**3=64×27=1728 حالة. أضفنا مثال أوزان 2 و5 و7 خارج هذه المجموعة، فصار الإجمالي 1729.

لكل حالة خمس مجموعات: أنواع استثناءات الأسماء الثلاثة؛ الحواف الثابتة مع الأوزان وبدونها؛ العد الموزون أمام مرجع الجمع؛ العد الخام أمام مرجع الظهور؛ وأشكال المخرجات وأنواعها. مرت 1729×5=8645 مجموعة.

لكل حالة ثلاثة نداءات اختيار تلقائي مرفوضة، ونداءان لحواف العدد الصريح، ونداءان للمدرج: سبعة نداءات. الإجمالي 1729×7=12103، منها 5187 للاختيار المرفوض و3458 للحواف الثابتة و3458 للعد.

النطاق متجهات float64 غير فارغة بطول ثلاثة، وقيم داخل الفئات، وأوزان float64 منتهية غير سالبة وبالشكل نفسه. فحصنا auto وfd وsturges مع الأوزان، وbins=2 ضمن 0 إلى 4، وعدًا بحواف صريحة دون كثافة.

لم نفحص أوزانًا سالبة أو مفقودة أو مختلفة الشكل، أو أطرافًا وقيمًا خارج المدى أو NaN أو مدخلًا فارغًا، أو قيم حواف تلقائية دون أوزان، أو كثافة أو أسماء مقدرات أخرى أو أداء أو تعديلًا في الذاكرة. لم نشغّل إصدارًا أقدم.

عند نقل هذه النتيجة، احفظ نوع الطلب: اسم مقدّر مع أوزان، أو عدد فئات صريح، أو عد داخل الحواف. كلمة weights في الواجهات الثلاث لا تكفي وحدها لاعتبارها مراحل متطابقة.

الطلبالنتيجةالقراءة
auto / fd / sturges + wTypeErrorno returned edges
bins=2, range=(0,4), with/without w[0,2,4]edges only
histogram explicit edges + w[7,7]weight sum 14
histogram explicit edges without w[2,1]3 occurrences

للتوسع: كثافة المدرج ومساحته.

المراجع

  1. NumPy histogram_bin_edges
  2. NumPy 2.3.5 bin-selection dispatch

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