علوم وفضاء

moveaxis في NumPy: نقل المحور ليس تبديل طرفين

ترتيب C الأصلي 0 و1 و2 بشكله 2 في 3 في 2. النقل 0 إلى 2 يعطي 1 و2 و0 بشكل 3 في 2 في 2؛ التبديل 0 مع 2 يعطي 2 و1 و0 بشكل 2 في 3 في 2. قيمة سالب 3 تنتقل من 0 و2 و1 إلى 2 و1 و0 أو 1 و2 و0.
أسماء المحاور وفهرس −3 يميزان الناتجين.

moveaxis ينقل محاور ويحفظ ترتيب البقية؛ swapaxes يتبادل محورين. [1] [2]

اكتب هوية كل محور

moveaxis يحفظ ترتيب المحاور غير المنقولة؛ swapaxes يتبادل محورين. [1] [2]

نكتب C=[[[4,-1],[9,6],[2,-3]],[[8,5],[0,-7],[1,10]]]. لدينا ثلاث مراتب للفهرس، نرقم محاورها من صفر. المحور 0 طوله 2، والمحور 1 طوله 3، والمحور 2 طوله 2. مجموع القيم 2×3×2=12.

نسمي المحاور عينة وصفًا وقناة على الترتيب. هذه تسميات للمثال، وليست استنتاجًا من قيم الأعداد. الرسم يكتب ترتيب المحاور الأصلية (0,1,2)، فلا نخلط رقم المحور بطوله أو بقيمة عنصر.

وجود طولين يساويان 2 لا يجعل المحورين الأول والأخير الشيء نفسه. في التنظيم الأصلي يحمل الفهرس (0,0,1) العدد −1؛ أما (1,0,0) فيحمل 8. سنستخدم هذين الموضعين لاختبار معنى الشكل الذي يبدو ثابتًا.

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

قارن النقل بتبديل طرفين

نقل 0 إلى 2 يحفظ ترتيب البقية. [1] في C نحصل على (1,2,0) وشكل (3,2,2).

نكتب ناتج نموذجنا مستقلًا: [[[4,8],[-1,5]],[[9,0],[6,-7]],[[2,1],[-3,10]]]. كل زوج أخير يجمع الموضع نفسه من العينتين الأصليتين؛ المحور الخاص بالعينة صار الأخير.

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

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

نتابع −3، وهو عند (0,2,1) قبل العملية. بعد النقل يصل إلى (2,1,0)، وبعد التبديل يصل إلى (1,2,0). مكونات الفهرس تأتي من الموضع الأصلي نفسه، لكن ترتيبها مختلف. لهذا لا نستبدل اسم العملية أو أرقام محاورها لأن الناتج يبدو قابلًا للعرض.

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

انقل المجموعة في طلب واحد

moveaxis يقبل تسلسل مصادر وتسلسل وجهات؛ كل منهما بلا تكرار. [1]

نختار المصادر (0,2) والوجهات (1,0). الزوج الأول يقول إن المحور الأصلي 0 يذهب إلى الموضع النهائي 1، والثاني يقول إن المحور الأصلي 2 يذهب إلى الموضع النهائي 0. يبقى المحور الأصلي 1 للموضع النهائي 2. النتيجة ترتيب (2,0,1) وشكل (2,2,3).

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

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

لا ننفذ أزواج الطلب المتزامن كأنها خطوات متتابعة دون إعادة حساب الهوية. في المقارنة المؤلفة، نقل المجموعة دفعة واحدة ترك العينة قبل الصف، بينما خطوتا النقل تركتا الصف قبل العينة. اختلاف ترتيب المحورين يظهر أيضًا في الأطوال: (2,2,3) مقابل (2,3,2).

المصادر 0 و2 والوجهات 1 و0 تعطي الترتيب النهائي 2 و0 و1. نقل 0 إلى 1 ثم المحور الحالي 2 إلى 0 يعطي 2 و1 و0.
اقتران المصدر بوجهته يخص التنظيم الأصلي في الطلب الواحد.

استعد التنظيم الأصلي

نبدأ من نتيجة النقل الأول ذات ترتيب (1,2,0). كان محور العينة الأصلي 0 قد وصل إلى الموضع الحالي 2. نقله من 2 إلى 0 يعيد ترتيب (0,1,2) ويعيد قيم C إلى فهارسها الأصلية في نموذجنا.

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

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

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

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

الطلب على Cترتيب المحاور الأصليةالشكل
قبل العملية(0,1,2)(2,3,2)
moveaxis: 0 إلى 2(1,2,0)(3,2,2)
swapaxes: 0 مع 2(2,1,0)(2,3,2)
moveaxis: (0,2) إلى (1,0)(2,0,1)(2,2,3)
نقل 0 إلى 1 ثم الحالي 2 إلى 0(2,1,0)(2,3,2)
عكس النقل الأول: 2 إلى 0(0,1,2)(2,3,2)

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

المراجع

  1. NumPy — moveaxis
  2. NumPy — swapaxes

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