نكتب دالة تعيد مجموع القيم وطولها، ثم نسجل ما يصل إليها من جدول صغير. تغيير المحور يغير الشرائح الداخلة وموضع الميزتين في الناتج.
مدخل الدالة وموضع نتيجتها
تستدعي apply_along_axis الدالة على شرائح أحادية البعد؛ أبعاد نتيجة الدالة تحل محل المحور المختار في شكل الناتج. [1] [2]
في التنفيذ المحدد تُستعمل نتيجة أول شريحة لتحديد حيز الناتج، ثم تُحفظ فيها وتُستدعى الدالة على الشرائح الباقية. [2]
لنتتبع هذا السلوك، نسجل قيم كل متجه يدخل الدالة وشكله وعدد أبعاده. نسجل أيضًا الميزتين اللتين تعيدهما ثم نفحص مصفوفة الغلاف كاملة.
السؤال العملي هو ما يصل إلى دالة كتبناها نحن: هل يصل الجدول الثنائي كله، أم عمود أو صف في صورة متجه؟ نثبت الجدول والدالة ونغير المحور بين تجربتين.
جدول واحد ودالة تعيد ميزتين
شغّلنا NumPy 2.3.5 على CPython 3.12.14. كتبنا A=np.array([[3,-1,5],[4,2,-2]],dtype=np.int64). الشكل (2,3): صفان وثلاثة أعمدة. الأعداد من تأليفنا.
داخل الدالة نحول قيم المتجه v إلى أعداد Python صحيحة، ثم نجمعها ونعدها. نعيد np.array([المجموع، العدد],dtype=np.int64). ترتيب الميزتين ثابت: المجموع أولًا، والعدد ثانيًا.
نسجل v.ndim وv.shape والقيم الواردة قبل إعادة الميزتين. في جميع نداءات المثال كان v.ndim يساوي 1؛ كل مدخل متجه، مع اختلاف طوله بين المحورين.
لا تأخذ دالتنا وسيطًا ثانيًا باسم axis؛ نمرر اختيار المحور إلى np.apply_along_axis(own,axis,A). الدالة own نفسها تعمل على المتجه الذي يصلها وتعيد ميزتين بالشكل (2,).
حتى إذا تساوى شكل الناتج مع شكل A في إحدى التجربتين، نراجع معنى كل خانة. الصف الذي يحوي الأعداد في الناتج يمثل أطوال الشرائح، وقد تختلف قيمه تمامًا عن صفوف A.
الأعمدة ثم الصفوف في سجل النداءات
عند axis=0 سجلت دالتنا ثلاثة متجهات بالترتيب: [3,4] ثم [-1,2] ثم [5,-2]. شكل كل متجه (2,)، لأن العمود في جدولنا يحمل قيمتين.
أعادت الدالة [7,2] ثم [1,2] ثم [3,2]. المجاميع هي 3+4=7، و-1+2=1، و5-2=3؛ كل عدد ثانٍ يساوي طول العمود 2.
أعاد الغلاف [[7,1,3],[2,2,2]] من int64 بالشكل (2,3). في هذا الناتج الصف الأول للمجاميع، والثاني للأطوال؛ كل عمود يحمل ميزتي عمود المدخل الموافق له.
عند axis=1 سجلت الدالة متجهين: [3,-1,5] ثم [4,2,-2]. شكل كل متجه (3,). أعادت [7,3] ثم [4,3]، لأن 3-1+5=7 و4+2-2=4، وطول كل صف 3.
أعاد الغلاف [[7,3],[4,3]] من int64 بالشكل (2,2). هنا يحمل كل صف ميزتي صف المدخل: المجموع في العمود الأول، والطول في الثاني.
إذن نرى ثلاث زيارات لأعمدة طولها اثنان في التجربة الأولى، وزيارتين لصفوف طولها ثلاثة في الثانية. النتيجة الثابتة ذات الميزتين تظهر في محور الصفوف أو الأعمدة وفق اختيارنا.
فحصنا أن بايتات A بقيت كما كانت بعد كل استدعاء. هذا فحص أثر دالتنا التي تجمع وتعد؛ لم نجعلها تعدل المتجه الوارد أو نستنتج منه ضمانًا عن مشاركة الذاكرة.

شبكة تحقق وعددان مختلفان للنداءات
استخرج مرجع Python الصفوف والأعمدة من قوائم المدخل، وجمع قيم كل شريحة وعدها بحلقات مستقلة. كتبنا مواضع الميزتين وشكل الناتج المتوقع دون استعمال apply_along_axis لإنتاج المرجع.
للشبكة اخترنا الأشكال (1,1) و(1,2) و(2,1) و(2,2) و(2,3) و(3,2). لكل خانة إحدى القيم -2 و0 و3. عدد المصفوفات 3+9+9+81+729+729=1560.
أضفنا مثالنا الذي يتضمن قيمًا خارج اختيارات الشبكة، فصار الإجمالي 1561 حالة. لكل حالة تجربتان مستقلتان على المحورين 0 و1؛ مرت 1561*2=3122 مجموعة.
عدد استدعاءات apply_along_axis هو 3122، مرة لكل مجموعة. أما دالتنا فاستدعيت 7679 مرة عبر جميع الشرائح، منها خمسة نداءات في المثال الرئيسي. إنشاء مصفوفة الميزتين داخل الدالة لا يدخل عدد استدعاءات الغلاف.
لكل مجموعة قارنا ترتيب المتجهات الواردة وقيمها وأشكالها وأبعادها، والميزتين المعادتين، ثم قيم الناتج الكامل وشكله ونوعه. راجعنا أيضًا بقاء بايتات المدخل.
النطاق مصفوفات int64 ثنائية غير فارغة بالأشكال الستة، وقيم صحيحة صغيرة منتهية، ومحور 0 أو 1، ودالة تعيد دائمًا متجه int64 بطول اثنين.
لم نفحص نتيجة عددية منفردة أو أعلى رتبة أو متغيرة الشكل، أو محورًا سالبًا أو غير صالح، أو وسائط إضافية، أو مصفوفات فارغة أو مقنعة أو أصنافًا فرعية. لم نفحص نوعًا آخر أو أعدادًا كبيرة أو غير منتهية، ولم نقس الأداء أو نشغّل إصدارًا أقدم.
عند كتابة دالة لهذه التجربة، افحص سجل الشريحة الداخلة أولًا، ثم ترتيب الميزات في المصفوفة النهائية. توافق المجاميع وحده قد يخفي تفسيرًا خاطئًا للصف الذي يحمل الأطوال.
| المحور | الشرائح الواردة | ناتج الغلاف |
|---|---|---|
| 0 | [3,4]; [-1,2]; [5,-2] | [[7,1,3],[2,2,2]] / shape (2,3) |
| 1 | [3,-1,5]; [4,2,-2] | [[7,3],[4,3]] / shape (2,2) |
للتوسع: متوسط الجدول والمحور.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
