علوم وفضاء

argmax في NumPy: فهرس أي محور؟

A صفاها سالب 3 و12 و12، ثم 12 و4 و8. الفهرس المسطح الأول للعظمى 1، وفهارس الصفوف لكل عمود 1 و0 و0، وفهارس الأعمدة لكل صف 1 و0.
الفهرس يقرأ مع المحور الذي يخصه.

argmax تعيد فهارس القيم العظمى؛ الافتراضي فهرس في المدخل المسطح. [1]

اقرأ الموضع عند التعادل

عند تعادل القيم العظمى، توثق argmax اختيار أول ظهور. [1]

نؤلف A=[[-3,12,12],[12,4,8]]، من صفين وثلاثة أعمدة. نرقم الصفوف والأعمدة والمواضع المسطحة من صفر، ونقرأ صفًا بعد صف من اليسار إلى اليمين. الأعداد بلا وحدة، وليست درجات نموذج أو قياسات جديدة.

تسلسلنا المسطح [-3,12,12,12,4,8] بطول 6. القيمة العظمى 12 تظهر عند المواضع 1 و2 و3. أولها 1؛ لذلك نختار هذا الفهرس في نموذجنا، وليس العدد 12 نفسه أو قائمة المواضع الثلاثة كلها.

نكتب الموضع الكامل لهذا الاختيار: الصف 0 والعمود 1. الفهرس المسطح 1 لا يقول وحده أي صف وعمود إلا إذا عرفنا الشكل وترتيب القراءة. ولا يعني ترتيب المواضع الثلاثة أن قيمها غير متساوية؛ التعادل في القيمة بقي قائمًا.

إذا بدلنا ترتيب الصفين إلى [[12,4,8],[-3,12,12]]، تصير أول 12 عند الموضع المسطح 0، أي (0,0) في التنظيم الجديد. القيمة العظمى لم تتغير، لكن الاختيار الأول انتقل إلى خانة كانت في الصف الثاني سابقًا.

إذن اختيار أول موضع متعادل ليس حكمًا على أفضلية السجل الذي قد يحمل الرقم. في مثالنا لا توجد أصلًا تسميات سجلات أو معيار جودة؛ نتتبع ترتيبًا وقيمًا اخترناهما.

حدد المحور الذي يختزل

عند تحديد axis، تكون الفهارس على ذلك المحور، ويزال من شكل الناتج افتراضيًا. [1]

نختار axis=0 في A، فتجري المقارنة عبر الصفوف داخل كل عمود. العمود الأول −3 ثم 12، فيختار رقم الصف 1. العمود الثاني 12 ثم 4، فيختار 0. والثالث 12 ثم 8، فيختار 0. فهارس الناتج [1,0,0]، واحد لكل عمود.

المواضع الكاملة لهذا الاختيار (1,0)، (0,1)، (0,2). القيم المرتبطة بها [12,12,12]. لا نقرأ القائمة [1,0,0] على أنها ثلاثة فهارس في التسلسل المسطح؛ عندئذ تختار 12 ثم −3 ثم −3 في تسلسلنا، ويتغير السؤال.

أما axis=1، فتجري المقارنة عبر الأعمدة داخل كل صف. في الصف الأول تتعادل 12 عند العمودين 1 و2، فنختار 1. في الثاني 12 عند العمود 0 هي العظمى، فنختار 0. فهارس الناتج [1,0]، واحد لكل صف.

نقرأها مع الصفوف التي تخصها: (0,1) ثم (1,0)، فتكون القيمتان 12 ثم 12. الفهرس 0 في العنصر الثاني يشير إلى عمود داخل الصف الثاني، ولا يشير إلى −3 الموجودة عند الموضع المسطح 0.

نتيجة الصفوف ذات شكل (2,)، ونتيجة الأعمدة ذات شكل (3,). اختلاف عدد الفهارس هنا يتبع المحور الذي بقي بعد المقارنة، وليس عدد مواضع 12 في الجدول كله.

ميز الفهرس من شكله وقيمته

keepdims=True يحتفظ بالمحور المختزل بطول 1، مع بقاء الناتج فهارس. [1]

مع axis=1 في A، نكتب فهرس الصف الأول 1 في صف منفرد، وفهرس الصف الثاني 0 في الصف التالي. الشكل الآن (2,1)، بدل (2,). عدد الفهارس ما زال اثنين، ومعناهما ما زال اختيار عمود لكل صف.

ومع axis=0، تظهر الفهارس [1,0,0] في صف واحد بشكله (1,3)، بدل (3,). المحور الذي قارنا على طوله الصفين صار بطول واحد في وصف الناتج؛ لا نعيد صفًا ثانيًا من فهارس جديدة.

نحافظ على التمييز بين حاوية الفهرس والقيمة التي يختارها. إذا قرأنا مصدر المثال بفهرس 1 للصف الأول و0 للثاني، وجدنا 12 ثم 12؛ لكن جدول الفهارس ذو العمود الواحد يحمل 1 ثم 0، لا 12 ثم 12.

تغيير الشكل لا يحول الفهرس إلى قيمة العظمى، ولا يجعل عدد الفهارس مساويًا لعدد الخانات الأصلية. في مثال axis=1، كانت A من ست خانات، والناتج في التنظيمين من فهرسين.

نراجع شكل الناتج حين تتوقع الخطوة التالية محورًا مفردًا معلنًا. الحساب هنا نموذج قيم وفهارس، ولا يشهد بتوافق أي استدعاء جمع أو فهرسة متقدمة في مكتبة فعلية.

الموضع المسطح 1 يتحول إلى الصف 0 والعمود 1 بترتيب C، أو الصف 1 والعمود 0 بترتيب F. كلا موضعي A يحمل 12؛ تعادل القيمة يخفي اختلاف الإحالة.
نحفظ ترتيب التحويل؛ تطابق القيمة لا يحفظ موضعها.

احفظ ترتيب تحويل الموضع

في unravel_index، يحدد order ترتيب تفسير الموضع المسطح: C للصفوف أو F للأعمدة. [2]

نعود إلى الموضع المسطح 1 الذي حسبناه بقراءة A صفًا بعد صف. في الشكل (2,3)، يبدأ الصف الثاني بعد ثلاثة مواضع. قسمة 1 على 3 تعطي جزءًا صحيحًا 0 وباقيًا 1، فيكون الموضع (0,1). هذه صيغة التحويل في مثال البعدين بترتيب C.

في المقابل، قراءة الأعمدة أولًا لهذا الجدول هي [-3,12,12,4,12,8]. الموضع 1 فيها يشير إلى الصف 1 والعمود 0، أي (1,0). لم نغير الرقم 1 أو شكل المصدر؛ تغير ترتيب تفسير الرقم.

الموضعان (0,1) و(1,0) يحملان 12 في A. لذلك فحص القيمة وحدها لا يكشف خلط ترتيب التحويل هنا. إذا كان المطلوب أول موضع في قراءة الصفوف، فالإحالة إلى (1,0) لا تحقق تلك الهوية رغم وصولها إلى قيمة عظمى متعادلة.

نحفظ الشكل والترتيب إلى جانب الفهرس المسطح، ونحفظ المحور إلى جانب الفهرس المحلي. لا نمرر رقمًا محليًا من محور الأعمدة إلى تحويل يفترض رقمًا عالميًا في تسلسل كل القيم دون إعادة تحديد معناه.

نفحص جميع الأشكال الموجبة البالغ عددها 120، من محور واحد إلى أربعة وبأطوال من 1 إلى 3، وستة أنماط قيم صحيحة. ونفحص كل نمط ثنائي للأشكال التي لا تتجاوز ست خانات، مع كل محور صحيح غير سالب ومقارنة keepdims.

نقارن اختيارًا متتابعًا لا يبدل الموضع إلا لقيمة أكبر، بمقارنة مستقلة تحسب العظمى ثم تبحث عن أولها. ونراجع فك جميع مواضع القراءة C إلى إحداثياتها. نقصر الشرح على أعداد صحيحة ومدخل غير فارغ؛ لا NaN أو محاور فارغة أو سالبة، ولا تشغيل NumPy أو قياس ذاكرة وزمن.

الاختيار على Aالشكلالفهرس أو الفهارس
التسلسل المسطحعدد واحد1؛ مكانه (0,1) بترتيب C
axis=0(3,)1، 0، 0
axis=1(2,)1، 0
axis=0 مع keepdims(1,3)صف من 1، 0، 0
axis=1 مع keepdims(2,1)1 في الصف الأول؛ 0 في الثاني

للتوسع: الأبعاد والقطر والمنقول.

المراجع

  1. NumPy — argmax
  2. NumPy — unravel_index

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