علوم وفضاء

meshgrid في NumPy: ترتيب xy وij

مع x يساوي 2 و6 وy يساوي سالب 3 و1 و4، تنظيم xy ثلاث صفوف وعمودان، وij صفان وثلاثة أعمدة. الموضع 0 و1 يشير إلى 6 وسالب 3 في الأول، وإلى 2 و1 في الثاني.
نقاط مؤلفة؛ فهرس الخانة ليس إحداثيي النقطة.

meshgrid يستخدم xy افتراضيًا، ويختلف ترتيب البعدين مع ij. [1] نتابع إحداثيات الخانة.

كون أزواج الإحداثيات أولًا

نؤلف قائمتين: x=[2,6] للإحداثي السيني، وy=[-3,1,4] للإحداثي الصادي. الأعداد بلا وحدة، وليست مشاهدات جهاز. لكل اختيار من الأولى ثلاثة اختيارات من الثانية، فتوجد 2×3=6 أزواج مرتبة.

لمدخلين بطولي M وN، شكل meshgrid هو (N,M) مع xy و(M,N) مع ij. [1]

نرتب xy صفًا لكل قيمة y، وعمودًا لكل قيمة x. الصف الأول للنقاط (2,−3) و(6,−3)، والثاني (2,1) و(6,1)، والثالث (2,4) و(6,4). عدد الصفوف 3 وعدد الأعمدة 2.

مصفوفة الإحداثي X هي [[2,6],[2,6],[2,6]]، ومصفوفة الإحداثي Y هي [[-3,-3],[1,1],[4,4]]. نأخذ العددين في الموضع نفسه لصنع نقطة واحدة؛ لا نخلط قيمة X من صف مع قيمة Y من صف آخر.

هذه شبكة لجميع الاختيارات، وليست إقرانًا متتابعًا للقائمتين. إقران الموضع الأول بالموضع الأول ثم الثاني بالثاني يعطي نقطتين فقط، ويترك y=4 بلا مقابل. أما اختيار x=2 في الشبكة فيظهر مع قيم y الثلاث.

ميز موضع الخانة من إحداثياتها

نكتب تنظيم ij صفًا لكل x وعمودًا لكل y. الصف الأول للنقاط (2,−3) و(2,1) و(2,4)، والثاني (6,−3) و(6,1) و(6,4). الشكل صفان وثلاثة أعمدة.

تصبح X=[[2,2,2],[6,6,6]] وY=[[-3,1,4],[-3,1,4]]. مجموعة الأزواج الستة لم تتغير؛ ما تغير هو أي فهرس صف وأي فهرس عمود يصل إلى كل زوج.

نرقم الصفوف والأعمدة من صفر ونقرأها من اليسار إلى اليمين. في xy، الموضع [0,1] يقرأ ثاني x وأول y، أي (6,−3). وفي ij يقرأ أول x وثاني y، أي (2,1). إذن إبقاء العددين 0 و1 في بطاقة الفهرس لا يحفظ النقطة.

للنقطة التي تستخدم x عند i وy عند j، الموضع في تنظيمنا xy هو [j,i]، وفي ij هو [i,j]. هذه متابعة لتعريف الصفوف والأعمدة السابق، وليست تبديلًا لقيم الإحداثيين داخل النقطة؛ تبقى النقطة مكتوبة (x,y).

ونختبر حالة تخفيها الأبعاد: نحذف y=4، فتصبح القائمتان بطول 2. كلا التنظيمين الآن 2×2، لكن [0,1] ما زال يشير إلى (6,−3) في الأول و(2,1) في الثاني. فحص الشكل وحده لا يكتشف هذا الاختلاف.

احسب الدالة على الأزواج نفسها

نعلن دالة خاصة بالمثال: f(x,y)=x+2y. نعوض في كل زوج على حدة. عند (2,−3) نحصل على 2−6=−4، وعند (6,−3) على 6−6=0. عند (2,1) تكون القيمة 4، وعند (6,1) تكون 8.

مع y=4، تعطي النقطتان 2+8=10 و6+8=14. لذلك جدول القيم في ترتيب xy هو [[-4,0],[4,8],[10,14]]. صفوفه تتبع y، وأعمدته تتبع x.

في ij تصبح الصفوف [[-4,4,10],[0,8,14]]. هذا منقول الجدول السابق في مثال البعدين نفسه، لأن موضع كل زوج تبادل فهرسيه. القيمة المتعلقة بالنقطة لم تتغير: (6,1) تعطي 8 في الجدولين.

لكن قراءة الفهرس نفسه دون الإحداثيات قد توهمنا بتغير الدالة. الموضع [0,1] يعطي 0 في xy و4 في ij؛ هاتان قيمتان لنقطتين مختلفتين حسب ما حسبناه. لا نصف الاختلاف بأنه خطأ حساب قبل معرفة النقطة التي سألنا عنها.

وفي المثال المربع ذي y=[-3,1]، يكون جدول xy هو [[-4,0],[4,8]]، وجدول ij هو [[-4,4],[0,8]]. الشكلان متساويان، ومع ذلك تختلف الخانتان خارج القطر. نحفظ X وY أو تعريف المحاور مع جدول القيم.

حساب f على الأزواج لا ينتج قياسات فعلية جديدة. كما أننا لا نستوفي دالة مجهولة بين النقاط؛ لقد أعلنّا صيغة وطبقناها على مواضع اختَرناها. تغيير ترتيب الجدول لا يضيف نقطة سابعة إلى الشبكة.

في xy مصفوفة X المختزلة صف واحد 2 و6، ومصفوفة Y المختزلة عمود سالب 3 و1 و4. للدالة x زائد ضعفي y، الصفوف سالب 4 و0؛ 4 و8؛ 10 و14. عدد خانات الإحداثيات 5 وجدول القيم 6.
إحداثيات مختزلة؛ جدول القيم ما زال من ست خانات.

راجع الشكل عند استخدام sparse

sparse=True يختزل الإحداثيات للبث؛ التعبير قد ينتج مصفوفة كاملة. [1]

في تنظيم xy لمثالنا، نحتفظ بـX في صف واحد [[2,6]] شكله (1,2)، وبـY في عمود قيمه −3 ثم 1 ثم 4، شكله (3,1). لا نضع صفرًا مكان الإحداثيات التي لم نكررها؛ نحتفظ بالقائمة في بعد مناسب.

في البث، نقارن الأبعاد من اليمين؛ يتوافق البعدان إذا تساويا أو كان أحدهما 1. [2]

هنا البعد الأخير 2 مع 1 فينتج 2، والآخر 1 مع 3 فينتج 3. لذلك تعبير X+2Y يعود في نموذجنا إلى جدول (3,2). عند الخانة [r,c] نستخدم X[0,c] وY[r,0]؛ فنحصل على جدول القيم الست السابق.

نعد مواضع الإحداثيات المكتوبة: في الشكلين الكاملين توجد 6+6=12 خانة، وفي الشكلين المختزلين 2+3=5. أما جدول f الكامل فله 6 خانات. اختزال وصف الإحداثيات لا يعني أن الناتج النهائي من خمس قيم أو أنه يلغي حجم جدول القيم.

وفي ij تكون الأشكال المختزلة (2,1) لـX و(1,3) لـY، ويكون شكل f هو (2,3). لذلك نحافظ على اختيار indexing مع اختيار sparse؛ الاختزال لا يزيل تعريف المحاور.

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

التنظيمشكل X الكامل وY الكاملشكل X المختزلشكل Y المختزلشكل f
xy(3,2)(1,2)(3,1)(3,2)
ij(2,3)(2,1)(1,3)(2,3)

للتوسع: عدد المحاور وإضافة البعد.

المراجع

  1. NumPy — meshgrid
  2. NumPy — broadcasting

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