علوم وفضاء

rot90 في NumPy: اتجاه الدوران ومستواه

A صفاه 5 وسالب 2 و8؛ 4 و1 و6. ربع دورة على 0 و1 يعطي صفوف 8 و6؛ سالب 2 و1؛ 5 و4. الاتجاه المعاكس يعطي 4 و5؛ 1 وسالب 2؛ 6 و8.
النتيجتان بالشكل 3 في 2، وقيم صفوفهما مختلفة.

rot90 يدور بزيادات 90° في مستوى محورين مختلفين؛ الافتراضي الثنائي عكس عقارب الساعة. [1]

اضبط اتجاه ربع الدورة

rot90 يدور بمقدار 90° في مستوى المحورين؛ k عدد مرات الدوران. [1]

نؤلف A من صفين وثلاثة أعمدة: [[5,-2,8],[4,1,6]]. نرقم الصفوف والأعمدة من صفر، ونقرأ القيم داخل الصف من اليسار إلى اليمين. الأعداد بلا وحدات، ولا تمثل صورة أو قياسًا فعليًا.

مع k=1 والمحورين (0,1)، نقرأ العمود الأخير ليكون الصف الأول: 8 ثم 6. العمود الأوسط يصبح الصف الثاني: −2 ثم 1. العمود الأول يصبح الصف الثالث: 5 ثم 4. نتيجة نموذجنا [[8,6],[-2,1],[5,4]]؛ الأطوال تبدلت من (2,3) إلى (3,2).

عكس ترتيب المحورين يعكس الاتجاه، ويكافئ k=-1 للمحورين الأصليين. [1]

في المثال نفسه، الاتجاه المعاكس يضع العمود الأول معكوسًا أولًا: 4 ثم 5؛ وبعده 1 ثم −2؛ وأخيرًا 6 ثم 8. النتيجة [[4,5],[1,-2],[6,8]]. الشكل (3,2) في الاتجاهين، لكن الصف الأول يختلف.

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

افصل نصف الدورة عن القلب المفرد

flip يعكس العناصر على المحور المختار ويحفظ الشكل. [2]

نقلب الأعمدة فقط في A، فنحصل على [[8,-2,5],[6,1,4]]، بالشكل (2,3). ما زال كل صف يضم ثلاثة أعداد؛ لا يطابق هذا ربع الدورة السابق، الذي أنشأ ثلاثة صفوف من قيمتين.

لنصف دورة نطبق ربع الدورة نفسه مرتين، أي k=2 في المثال. بعد الدوران الثاني، الصفان هما [6,1,4] و[8,-2,5]. الشكل يعود إلى (2,3)، لكن أعلى يسار A، الذي كان 5، صار 6.

نقلب الصفوف والأعمدة معًا في A مستقلًا: نضع الصف الثاني أولًا وبالعكس، ثم الصف الأول بالعكس. نحصل على [[6,1,4],[8,-2,5]] نفسها. هذا التطابق يخص نصف الدورة على محوري A، ولا يجعل قلب محور مفرد ربع دورة.

القيمة −2 بقيت سالبة في كل نتيجة. تحريك موضعها لا يبدل إشارتها. أما 1 فليس رقم محور أو عدد دورات؛ إنه عنصر اختير ضمن البيانات. نفصل أرقام الفهارس ومعامل k عن القيم التي تتنقل.

حدد مستوى الدوران في الدفعة

المستوى الافتراضي هو (0,1)، ويمكن اختيار محورين مختلفين. [1]

نضيف B=[[9,0,-3],[7,12,2]]، ونعلن C=[A,B] بشكل (2,2,3). المحور 0 يختار الجدول، والمحور 1 يختار الصف داخل الجدول، والمحور 2 يختار العمود. لتدوير الصفوف والأعمدة داخل كل جدول، نختار (1,2) وk=1.

نتيجة النموذج على (1,2) هي [[[8,6],[-2,1],[5,4]],[[-3,2],[0,12],[9,7]]]. الشكل (2,3,2): بقي لدينا جدولان؛ داخل كل منهما ثلاثة صفوف من قيمتين. لا ينتقل عنصر من A إلى مجموعة B في هذا الاختيار.

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

الشكل في الاختيار الافتراضي بقي (2,2,3)، لأن طولي المحورين المختارين يساويان 2. هذا الثبات يخفي تغير دور المجموعة الأولى: لا يصح أن نسميها A بعد التحويل، فقد جمعت صفين من جدولين مختلفين. أول قيمة في الناتج 4، مقابل 8 عند اختيار (1,2).

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

C شكلها 2 في 2 في 3. تدوير 1 و2 يعطي 2 في 3 في 2 وينقل 8 من 0 و0 و2 إلى 0 و0 و0. تدوير 0 و1 يحفظ شكل 2 في 2 في 3 وينقلها إلى 1 و0 و2.
تحديد المستوى يحفظ دور الجدول أو يغيره.

تتبع المواضع واستعد المدخل

نتابع 8 في C عند الفهرس (0,0,2). على المستوى (1,2)، يبقى رقم الجدول 0، وينتقل العمود الأخير إلى الصف الأول؛ الناتج عند (0,0,0). على (0,1)، يبقى العمود 2، وينتقل الصف الأول إلى المجموعة الثانية؛ الناتج عند (1,0,2).

نشتق خريطة لربع دورة في مستوى (a,b): مكوّن الفهرس الجديد عند a يساوي طول b ناقص 1 ناقص المكوّن القديم عند b؛ والمكوّن الجديد عند b يساوي القديم عند a. المحاور الأخرى تحفظ مكونات فهارسها. نطبقها على الموضع المعروف بدل تخمين الاتجاه من الشكل.

بعد دوران A بربع دورة، تطبيق k=-1 على المستوى نفسه يعيد قيمها ومواضعها الأصلية في حسابنا. كذلك أربعة أرباع متتابعة تعيد A، وخمسة أرباع تعطي نتيجة الربع الواحد. مع كل خطوة نستخدم أطوال الشكل الموجود عندها، فالمحوران يتبادلان الطولين بعد ربع دورة.

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

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

المدخل والاختيارالشكلأول قيمة
A: k=1، (0,1)(3,2)8
A: k=-1، (0,1)(3,2)4
A: k=2، (0,1)(2,3)6
A: k=4، (0,1)(2,3)5
C: k=1، (1,2)(2,3,2)8
C: k=1، (0,1)(2,2,3)4

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

المراجع

  1. NumPy — rot90
  2. NumPy — flip

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