علوم وفضاء

stack في NumPy: محور جديد أم إطالة محور؟

A وB شكلهما 2 في 3. تكديسهما على 0 يعطي 2 في 2 في 3 بمحور جدول جديد؛ وصلهما على 0 يعطي أربعة صفوف وثلاثة أعمدة. القيم الاثنتا عشرة محفوظة.
نحدد هل نضيف اختيار الجدول أم نطيل محور الصفوف.

stack يجمع على محور جديد؛ concatenate يصل على محور موجود. [1] [2]

ميّز المحور الجديد من الموجود

stack يزيد عدد المحاور واحدًا؛ concatenate يصل على محور موجود. [1] [2]

نؤلف جدولين A=[[3,-4,8],[6,2,9]] وB=[[10,5,-1],[7,0,12]]، كل منهما من صفين وثلاثة أعمدة. نرقم المواقع من صفر ونقرأ قيم الصف من اليسار إلى اليمين. الأعداد بلا وحدة ولا تمثل مخرجات تدريب.

مع stack على المحور 0، تصبح النتيجة [A,B] بالشكل (2,2,3). الموضع الأول من المحور الجديد يختار A، والثاني يختار B. داخل كل جدول بقي صفان وثلاثة أعمدة؛ صار لكل قيمة فهرس من ثلاثة مكونات.

أما concatenate على 0 فيضع صفوف A ثم صفوف B: [[3,-4,8],[6,2,9],[10,5,-1],[7,0,12]]. الشكل (4,3)، بمكونين للفهرس. اخترنا تمديد محور الصفوف، ولم ننشئ موضعًا مستقلًا لاختيار الجدول.

على المحور 1، الوصل يعطي [[3,-4,8,10,5,-1],[6,2,9,7,0,12]]، بالشكل (2,6). صف A الأول يليه صف B الأول داخل الصف الناتج، وكذلك الصف الثاني. جمع الجداول لا يعني جمع قيم الخانات حسابيًا: −4 بقيت −4، وليست −4+5.

قارن موضع محور الجدول

axis في stack يحدد موضع المحور الجديد في الناتج. [1]

على 0، أسماء المحاور المؤلفة جدول وصف وعمود. الناتج [A,B]، والفهرس (0,1,0) يعني الجدول A، وصفه الثاني، وعموده الأول؛ القيمة 6.

على 1، النتيجة [[[3,-4,8],[10,5,-1]],[[6,2,9],[7,0,12]]]. المحور الأول يختار الصف، والثاني يختار الجدول، والثالث العمود. الشكل أيضًا (2,2,3)، لكن (0,1,0) يعني الصف الأول من B وعموده الأول؛ القيمة 10.

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

على 2، نضع هوية الجدول أخيرًا، فنحصل على [[[3,10],[-4,5],[8,-1]],[[6,7],[2,0],[9,12]]] بالشكل (2,3,2). كل زوج أخير يقرأ قيمة A ثم قيمة B عند الصف والعمود نفسيهما. تغيير موضع محور الهوية لا ينشئ قيمة ثالثة في الزوج.

راجع توافق الأشكال

stack يحتاج أشكالًا متطابقة؛ concatenate يسمح باختلاف طول محور الوصل فقط. [1] [2]

نؤلف D=[[11,-6],[13,4]] بشكله (2,2)، بينما A شكلها (2,3). اختلاف العرض يعني أن الجدولين لا يحققان شرط stack؛ لا نضيف صفرًا أو نحذف عمودًا لنعلن أن المدخلين كانا متطابقين.

يمكن وصل A وD على المحور 1 في نطاق المثال، لأن عدد الصفوف متساوٍ. الناتج [[3,-4,8,11,-6],[6,2,9,13,4]] وشكله (2,5). طول الوصل 3+2=5؛ بقيت الخانات العشر دون اختراع عمود سادس.

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

نراجع شرط الشكل قبل بناء الناتج في نموذجنا. نستند إلى التوثيق في شروط المكتبتين، ولا ندعي التقاط استثناء من NumPy أو تحويل الأنواع أو استخدام خيارات flatten أو masks أو out.

التكديس على 0 وعلى 1 يعطي الشكل نفسه 2 في 2 في 3. الفهرس 0 و1 و0 يحمل 6 مع ترتيب جدول وصف وعمود، ويحمل 10 مع ترتيب صف وجدول وعمود.
الشكل المتساوي لا يحدد وظيفة المحور.

احفظ هوية المصدر وحدوده

نثبت ترتيب المصدرين A ثم B. إذا تكدسا على 0، نأخذ المجموعة 0 لاسترجاع A و1 لاسترجاع B. وإذا تكدسا على 1، نجمع الصفين مع اختيار الجدول نفسه في كل منهما. وإذا تكدسا على 2، نأخذ أول قيمة من كل زوج لـA، والثانية لـB.

في وصل الصفوف، نحفظ الحد بعد الصف الثاني: أول صفين من A وآخر صفين من B. وفي وصل الأعمدة، نحفظ الحد بعد العمود الثالث: أول ثلاثة أعمدة في كل صف من A ثم ثلاثة من B. وفي مثال A وD، الأطوال 3 ثم 2؛ لا نفترض تقسيمًا متساويًا لاستعادة المدخلين.

عدد القيم وحده لا يميز الخيارات. A وB يحتويان 12 قيمة في كل نتيجة عرضناها؛ تختلف الأشكال (2,2,3) و(2,3,2) و(4,3) و(2,6). حتى الشكل الواحد (2,2,3) يحتاج أسماء المحاور كي يفسر 6 و10 عند الفهرس الذي تابعناه.

نفحص نموذجنا على جميع الأشكال التسعة والثلاثين من بعد واحد إلى ثلاثة، بأطوال من 1 إلى 3؛ قوائم من مدخل واحد إلى أربعة مدخلات متطابقة الشكل، مع كل موضع صحيح غير سالب للمحور. المقارنة العامة تفحص التكديس والوصل للأشكال المتطابقة؛ مثال A وD ذو العرضين المختلفين مفحوص منفصلًا.

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

الاختيار على A وBالشكلأسماء المحاور
stack: 0(2,2,3)جدول، صف، عمود
stack: 1(2,2,3)صف، جدول، عمود
stack: 2(2,3,2)صف، عمود، جدول
concatenate: 0(4,3)صف، عمود
concatenate: 1(2,6)صف، عمود

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

المراجع

  1. NumPy — stack
  2. NumPy — concatenate

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