علوم وفضاء

pad mean: هل يبقى المتوسط الكسري في حشو مصفوفة صحيحة؟

ثلاثة مسارات للحشو نفسه ونوعان للخرج.
التحويل قبل الحشو يحفظ 4.5 في مثالنا؛ التحويل بعده يبقي 4.0.

mean يملأ الحشو بمتوسط قيم المحور المختارة. [1]

ثبت النمط وطول الإحصاء

mean يملأ الحشو بمتوسط قيم المحور المختارة. [1]

بدون stat_length يستخدم هذا النمط كامل المحور. [1]

نحدد مصفوفة أحادية البعد من عنصرين، ونطلب np.pad(x,1,mode="mean")؛ يضاف عنصر واحد قبلها وآخر بعدها. الأعداد مؤلفة بلا وحدة، وليست مشاهدات إضافية قبل سجل قياس أو بعده. نقارن النوع قبل العملية، مع إبقاء العددين والعرض والنمط ثابتة.

نوعان قبل الحشو وتحويل بعده

على NumPy 2.3.5 وCPython 3.12.14 أنشأنا x=np.array([2,7],dtype=np.int64). المتوسط الحسابي الدقيق (2+7)/2=9/2=4.5. أعاد np.pad(x,1,mode="mean") القيم [4,2,7,4] بنوع int64 وشكل (4,).

في التنفيذ المقروء، تبقى الوجهة من نوع المدخل، ويقرب الإحصاء إذا كانت الوجهة صحيحة. [2]

أنشأنا y=x.astype(np.float64) أولًا، ثم طبقنا الحشو نفسه. النتيجة [4.5,2.0,7.0,4.5] بنوع float64 وشكل (4,). في هذه المقارنة تغير نوع المدخل الذي استقبلته pad، وليس طول الإحصاء أو قيمة المتوسط الرياضي.

أما تنفيذ حشو int64 أولًا ثم تحويل نتيجته بـastype(np.float64)، فأعاد [4.0,2.0,7.0,4.0]. القيمتان المحشوتان كانتا قد أصبحتا 4؛ تحويلهما إلى صيغة عائمة لا يعيد 4.5. نميز بين إعداد نوع وجهة جديدة قبل الحساب وتغيير نوع نتيجة موجودة.

التقريب ليس حذف الكسر دائمًا

لتحكم مستقل اخترنا [2,13] من int64. المتوسط الدقيق 15/2=7.5؛ أعاد الحشو [8,2,13,8]. ومع التحويل إلى float64 قبل الحشو أعاد [7.5,2.0,13.0,7.5]، وبعد حشو الصحيح أعاد [8.0,2.0,13.0,8.0].

في المثال الرئيسي كان خطأ القيمة المحشوة قياسًا بالمتوسط الدقيق −1/2؛ وفي التحكم كان +1/2. لذلك لا نفسر النتيجتين بحذف الجزء الكسري، الذي كان سيجعل 7.5 تصبح 7. الرسم الداخلي يعرض هذين المثالين فقط، ولا يثبت سياسة لكل نوع أو مقدار.

لنفصل النوع عن اختيار المشاهدات، نفذنا np.pad(x,1,mode="mean",stat_length=1) للمدخل [2,7]. أعاد [2,2,7,7] بنوع int64: إحصاء الطرف الأيسر يستخدم العنصر 2 وحده، والأيمن يستخدم 7 وحده. المتوسطان هنا صحيحان أصلًا؛ هذا طلب آخر، وليس استعادة النصف المفقود من الطلب الأول.

تقريب 4.5 إلى 4 وتقريب 7.5 إلى 8 في المثالين.
الإشارة المختلفة لخطأ الحشو تمنع تفسيره بحذف الكسر دائمًا.

مرجع كسري ونطاق محدد

اخترنا p وq من {0,1,2,3,4}، أي 25 زوجًا مرتبًا للمدخل [p,q]. أضفنا [2,7] و[2,13] منفصلين؛ كلاهما خارج الشبكة. إذن 27 حالة، ولم نعد المثالين ضمن الأزواج الخمسة والعشرين.

حسبنا المتوسط بـFraction(p+q,2). لبناء مرجع القيمة الصحيحة قسمنا p+q على 2 قسمة صحيحة: إذا لم يوجد باقي أخذنا الناتج؛ وعند النصف اخترنا الناتج إن كان زوجيًا، وإلا العدد الصحيح التالي. هذا مرجع للتقريب عند التعادل إلى الزوجي في حالاتنا، وليس استدعاءً لـpad أو mean أو round في NumPy.

لكل حالة ثمانية فحوص: الحشو الصحيح مقابل المرجع، والحشو العائم بعد التحويل المبكر، والتحويل اللاحق للحشو الصحيح، والأنواع والأشكال، وخطأ الطرف مقابل الكسر الدقيق، وثبات المدخل، وتحكم stat_length=1، واتفاق التحويلين فقط عندما يكون المتوسط صحيحًا. مرت 27×8=216 فحصًا.

استعملنا المساواة التامة للأعداد الصغيرة الصحيحة وأنصافها، لا سماحًا عدديًا. العنصران الأصليان بقيا في الوسط؛ التغيير في القيم المحشوة. فحصنا أيضًا أن بايتات المدخلين الصحيح والعائم لم تتغير.

النطاق عنصران غير سالبين، int64 وfloat64، وعرض واحد لكل طرف. لا يشمل قيمًا سالبة أو كبيرة أو فيضًا أو float32 أو غير المحدود أو مصفوفة فارغة أو محاور متعددة أو عروضًا غير متناظرة أو إحصاءات أخرى أو الأداء. لا نعمم المساواة التامة إلى كل قيمة أو نوع.

المسار الرئيسيالقيم بعد الحشونوع الخرج
int64 ثم الحشو4، 2، 7، 4int64
float64 قبل الحشو4.5، 2، 7، 4.5float64
float64 بعد حشو int644.0، 2.0، 7.0، 4.0float64

للتوسع: حساب المتوسط الحسابي.

المراجع

  1. NumPy pad
  2. NumPy 2.3.5 padding implementation

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