علوم وفضاء

einsum: هل يحفظ الناتج الضمني ترتيب المحاور؟

جدول (2,3) بتسميات ba يعطي خرجًا ضمنيًا (3,2).
تسميات المصدر والخرج مختلفة الترتيب.

einsum الضمني يرتب تسميات محاور الناتج أبجديًا. [1] نتابع محوري جدول مؤلف دون جمع قيمه.

سمِّ كل محور

في الوضع الضمني، يرتب einsum تسميات محاور الخرج أبجديًا؛ يحدد -> ترتيب الخرج الصريح. [1]

نؤلف A=[[6,−1,9],[2,4,0]]. صفان وثلاثة أعمدة، وأعداد بلا وحدة. نختار التسميتين ba: الحرف b يخص محور الصفوف الأول ذي الطول 2، وa يخص محور الأعمدة الثاني ذي الطول 3.

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

تابع الناتج الضمني

حين يرتب نموذجنا ba أبجديًا، يصبح ترتيب الخرج ab. طول a هو 3 وطول b هو 2، فيعطي ثلاثة صفوف من قيمتين. نقرأ صف الناتج عند a=0 من b=0 ثم b=1، فنحصل على [6,2].

عند a=1، نأخذ القيمتين −1 و4، وعند a=2 نأخذ 9 و0. لذلك الناتج [[6,2],[−1,4],[9,0]]، بالشكل (3,2). كل قيمة أخذت مكانًا جديدًا تحدده تسميتا فهرسيها.

لنتابع 9: تقع في الصف الأصلي 0 والعمود 2، أي b=0 وa=2. ترتيب الإحداثيين في الخرج هو a ثم b، فتصل إلى الصف 2 والعمود 0. وصف القيمة بالتسميات يجعل انتقالها قابلًا للمراجعة.

نعرف الناتج في النموذج بعلاقة B[a,b]=A[b,a]، مع المجالات المناسبة. تمر أزواج المصدر الستة مرة واحدة؛ لا نسقط قيمة ولا نضيف قيمة أو نجمع عمودًا. ترتيب الخرج تغير لأن ترتيب التسميتين تغير.

اكتب ترتيب الخرج صراحة

نكتب ba->ba في مثالنا. جهة المدخل ما زالت تسمي المحورين b ثم a، وجهة الخرج تطلبهما بالترتيب نفسه. تبقى القيم [[6,−1,9],[2,4,0]] والشكل (2,3). نقصد ترتيب القيم هنا، لا هوية كائن أو مشاركة ذاكرة.

أما ba->ab فيعطي [[6,2],[−1,4],[9,0]]؛ ترتيب الخرج هو ترتيب الحروف بعد السهم، وليس ترتيب المدخل بالضرورة. [1]

يمكن اختيار اسمي المحورين ab من البداية بدل ba. عندها ترتيب الحروف الأبجدي يوافق ترتيب المدخل، فيبقى A في نموذج الخرج الضمني. تغيير اسم كل محور لا يبدل قيمة في المصدر، لكنه يغير اتفاقه مع ترتيب الخرج الذي نتركه ضمنيًا.

للكشف عن فرق لا يظهر في الأبعاد، نؤلف Q=[[6,−1],[2,4]]. مع تسميات ba، يصبح الخرج الضمني [[6,2],[−1,4]]. الشكل (2,2) كما كان، لكن الخانة (0,1) تحمل 2 بدل −1، والخانة (1,0) تحمل −1 بدل 2.

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

يبقى الشكل (2,2)، وتتبادل −1 و2 الموضعين.
نموذج مؤلف؛ الشكل لا يكفي.

حدود نموذجنا

نقصر النموذج على جدول صحيح غير خالٍ وحرفين صغيرين مختلفين يظهر كل منهما مرة. كل خرج صريح يحوي الحرفين دون حذف أو تكرار. لا نعمم قراءة هذه الأمثلة على تسميات مكررة أو حذف حرف أو عدة مدخلات أو علامة الحذف.

راجعنا الأطوال من 1 إلى 4 لكل محور، أي 16 شكلًا. أخذنا الأزواج المرتبة الستة من a وb وc، ثم ثلاثة طلبات لكل زوج: خروج ضمني، وخروج صريح بالترتيب نفسه، وخروج صريح معكوس. العدد 16×6×3=288 حالة.

لكل حالة خمسة فحوص: بناء الإحداثيات بالتسميات مقابل نقل مستقل بتجميع العناصر المناظرة من صفوف المصدر، والشكل، وحفظ قيم المواضع، واستعادة الأصل بترتيبه، وبقاء المدخل. ومع ثمانية فحوص مباشرة أصبح الإجمالي 5×288+8=1448.

لم نشغل einsum أو NumPy، ولم نفحص القطر أو الجمع أو البث أو مسارات تحسين الحساب، أو نوع البيانات ونسخها ومشاركة الذاكرة والسرعة. النموذج يراجع ترتيب قيم جدول ذي محورين؛ لا يثبت أداء المكتبة أو كل صيغ عباراتها.

الوصف المؤلفتسميات الخرجالشكل
ba ضمنيab(3,2)
ba->baba(2,3)
ba->abab(3,2)
ab ضمنيab(2,3)

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

المراجع

  1. NumPy — einsum

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