نجحت أوزان الصفوف مع محور واحد، ورُفضت مع إعدادين آخرين.
ثبت المحور والأوزان
عند axis=None، تحتاج average أوزانًا من شكل المدخل؛ مع محور محدد يجب توافق أبعاد الأوزان معه. [1]
نسأل هنا عن ارتباط الوزن بموضع في جدول ثنائي الأبعاد، لا عن تغيير مقياس جميع الأوزان أو استعمال أوزان سالبة. نختار وزنًا للصف الأول ووزنًا للثاني، ثم نحدد أي بعد نجمعه في عملية المتوسط.
إذا اختزلنا الصفين، ننتظر نتيجة لكل عمود. وإذا اختزلنا الأعمدة، ننتظر نتيجة لكل صف. نكتب هذا الهدف قبل الاستدعاء، ثم نراجع شكل الناتج وأي أعداد دخلت حساب كل خانة.
الأعداد مؤلفة للتعليم. الصف والعمود اسمان لموضعين في المثال، وليسا تعريفًا لصفوف أجهزة أو درجات أو أزمنة واقعية. لا يمنح نجاح استدعاء معنى للوزن لم نعلنه.
وزن الصف ومتوسط كل عمود
أنشأنا A=np.array([[-2,7,3],[4,0,9]],dtype=np.int64)، وw=np.array([2,1],dtype=np.int64). للمصفوفة صفان وثلاثة أعمدة؛ وللأوزان خانتان، الأولى تخص الصف الأول والثانية الصف الثاني.
استدعينا np.average(A,axis=0,weights=w). في NumPy 2.3.5 على CPython 3.12.14 كانت القيم [0.0,4.666666666666667,5.0]، والنوع float64، والشكل (3,). لم نعد مصفوفة بالشكل (2,3) بعد اختزال الصفين.
حسابنا الكسري للأعمدة مستقل: الأول (2×(-2)+1×4)/3=0؛ والثاني (2×7+1×0)/3=14/3؛ والثالث (2×3+1×9)/3=5. المقام ثلاثة هو مجموع وزني الصفين، وليس عدد أعمدة المصفوفة في هذا الحساب.
قراءة المكتبة 4.666666666666667 عدد عائم، وليست كسر Fraction مخزنًا داخل الناتج. حسب المرجع 14/3 بدقة، ثم مثله بعدد Python عائم للمقارنة. نفصل الكسر المرجعي عن طريقة كتابة العدد الناتج.
جربنا np.average(A,weights=w) مع ترك المحور الافتراضي، فأعطى TypeError. ثم جربنا np.average(A,axis=1,weights=w)، فأعطى ValueError. المدخل والأوزان نفسيهما في المحاولتين، لكن الطلب لم يعد طلب اختزال الصفين المعلن أولًا.
في اختيار axis=1، لدينا ثلاثة مواضع في كل صف، بينما قائمة w من عنصرين. لا ننسخ وزنًا ثالثًا ضمنيًا في دفترنا لنخفي عدم المطابقة. وفي الطلب الكامل دون محور، لا نعامل قائمتنا القصيرة كأنها مصفوفة أوزان ذات ست خانات.
المنقول والأوزان الكاملة
المنقول الثنائي يبدل المحورين. [2]
في تحكمنا، شكل A.T هو (3,2). شغّلنا np.average(A.T,axis=1,weights=w)، فأعاد [0.0,4.666666666666667,5.0] بالشكل (3,) والنوع float64، مساويًا لناتج A مع axis=0 في قيمه وشكله ونوعه.
صفوف المنقول هي [-2,4] و[7,0] و[3,9]. لذلك أصبحت خانتا w تقابلان موضعي كل صف من هذا العرض، وهما رقما الصفين الأصليين. تغير رقم المحور بعد المنقول؛ لم نغير ارتباط الوزن بالعدد الأصلي.
للاختزال داخل صفوف A نفسها، أنشأنا أوزان الأعمدة c=np.array([1,2,1],dtype=np.int64). أعادت np.average(A,axis=1,weights=c) القيم [3.75,3.25] بالشكل (2,) والنوع float64.
الكسران المرجعيان هما (-2+2×7+3)/4=15/4، و(4+2×0+9)/4=13/4. هنا يوجد ناتج للصف الأول وناتج للثاني، بينما كانت النتيجة الأولى من ثلاثة أعداد للأعمدة. لا نستبدل قائمتي الناتج لمجرد أن كليهما متوسط موزون.
أنشأنا أخيرًا F=np.array([[2,2,2],[1,1,1]],dtype=np.int64) بالشكل نفسه لـA، ثم شغّلنا np.average(A,weights=F). كانت النتيجة المفردة 3.2222222222222223 من float64 وبالشكل ().
حسب المرجع البسط 2×(-2+7+3)+1×(4+0+9)=29، ومجموع الأوزان 2+2+2+1+1+1=9، فالكسر 29/9. هذه نتيجة لكل الخانات، وليست متجهًا من ثلاثة متوسطات للأعمدة.

مرجع ونطاق الفحص
بنى المرجع كل متوسط عمود بتكرار الصفين في قوائم Python، وجمع الأعداد المضروبة بأوزانها ثم حساب Fraction للبسط والمقام. وللنتيجة الكاملة، مر على الصفوف والأعمدة وجمع ست مساهمات، وستة أوزان.
لم يستدعِ المرجع average أو transpose أو تحويل نوع من NumPy لبناء التوقع. للمقارنة مع النتائج العائمة، حول الكسر الدقيق إلى float في Python. المنتجات والمجاميع الصحيحة في النطاق المختبر صغيرة وممثلة بدقة قبل القسمة؛ لا نستنتج دقة مماثلة لكل مقدار ممكن.
اختبرنا كل جدول (2,3) من العددين -2 و5. توجد 2⁶=64 حالة قيم. ولكل جدول اخترنا وزني صف من الأعداد 1 و2 و3، أي تسعة أزواج، فكانت حالات الشبكة 64×9=576.
في كل حالة راجعنا ثمانية أشياء: قيم axis=0؛ ونوعها وشكلها؛ وتحكم المنقول مع axis=1؛ ورفض القائمة القصيرة دون محور؛ ورفضها على axis=1 في الأصل؛ والنتيجة الكاملة مع مصفوفة الأوزان؛ ونتيجتي الصفين مع أوزان الأعمدة [1,2,1]؛ وثبات بايتات المدخلات وأشكالها.
أضفنا ثمانية فحوص مماثلة للمثال الرئيسي، وأربعة خاصة بنتائج أعمدته وصفوفه وحسابه الكامل والمنقول المعلنة. الحساب 576×8+8+4=4620، ومرت جميعها.
الوزنان موجبان في كل حالة، والأوزان الكاملة تكرر وزن كل صف ثلاث مرات. لم نفحص أوزانًا صفرية أو سالبة أو محاور متعددة في استدعاء واحد أو أبعادًا وأنواعًا أخرى أو NaN أو keepdims أو returned أو الأداء أو ملكية الذاكرة.
احتفظ بشكل البيانات وشكل الأوزان ورقم المحور مع الناتج. وجود عدد مناسب من الأوزان في استدعاء واحد لا يثبت ملاءمتها عند تغيير البعد الذي تريد اختزاله.
| المدخل | الأوزان | المحور | الناتج |
|---|---|---|---|
| A / (2,3) | [2,1] | 0 | [0.0,4.666666666666667,5.0] |
| A / (2,3) | [2,1] | None | TypeError |
| A / (2,3) | [2,1] | 1 | ValueError |
| A.T / (3,2) | [2,1] | 1 | [0.0,4.666666666666667,5.0] |
| A / (2,3) | [1,2,1] | 1 | [3.75,3.25] |
| A / (2,3) | [[2,2,2],[1,1,1]] | None | 3.2222222222222223 |
للتوسع: المتوسط الموزون.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
