علوم وفضاء

حشو الطرف في NumPy: reflect أم symmetric؟

المواضع من ناقص 2 إلى 4؛ الأصل 2 و5 و9. reflect: 9 و5 و2 و5 و9 و5 و2؛ symmetric: 5 و2 و2 و5 و9 و9 و5؛ edge: 2 و2 و2 و5 و9 و9 و9.
قيم مؤلفة؛ حشو قيمتين في كل جهة وانعكاس even.

يختلف reflect عن symmetric في تكرار الطرف، مع reflect_type="even". [1] نحسب أثره في متوسط الحافة.

حدد مواضع الإضافة قبل الحساب

نؤلف سلسلة من ثلاث قيم x=[2,5,9]. نرقمها من صفر: x[0]=2، وx[1]=5، وx[2]=9. نريد أن نستخدم نافذة مركزية قرب البداية والنهاية، فتحتاج بعض النوافذ إلى مواضع لم تكن ضمن السلسلة الأصلية.

يحدد pad_width عدد القيم المضافة قبل كل محور وبعده. [1]

نختار في مثالنا بُعدًا واحدًا وعرضًا 2 قبل البداية و2 بعد النهاية. مواضع السلسلة الموسعة هي −2 و−1 و0 و1 و2 و3 و4، وطولها 7. تبقى القيم الأصلية الثلاث في الوسط، ونحسب أربع قيم خارجها وفق القاعدة.

العدد السالب هنا فهرس في نموذج السلسلة الممتدة، ولا نستخدمه بوصفه صيغة فهرسة برمجية من نهاية قائمة. عندما نكتب الموضع −1 نقصد خطوة قبل الموضع 0، وعندما نكتب الموضع 3 نقصد خطوة بعد الموضع 2.

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

لا نغير عدد المشاهدات الأصلية الذي هو 3. السلسلة الممتدة وسيلة لتعريف العملية عند حدود هذا السجل. ما سنكتبه خارج المواضع الأصلية ليس جزءًا من بيانات جُمعت من جهاز أو تجربة.

ميز الانعكاس مع تكرار الطرف ومن دونه

في NumPy، reflect ينعكس حول قيم الطرف، وsymmetric حول الحافة. نستخدم reflect_type="even"، وهو الافتراضي؛ odd قاعدة أخرى. [1]

نبدأ بـreflect في المثال. إلى يسار الموضع 0، ننعكس من دون إعادة قيمته 2: الموضع −1 يأخذ 5 من الموضع 1، والموضع −2 يأخذ 9 من الموضع 2. إلى يمين الموضع 2، الموضع 3 يأخذ 5، والموضع 4 يأخذ 2.

إذن التمديد هو [9,5,2,5,9,5,2] بالترتيب من −2 إلى 4. محور الانعكاس يمر بموضع العينة الطرفية نفسها. الجاران على جانبي الموضع 0 يحملان 5؛ وعلى جانبي الموضع 2 يحملان 5 أيضًا.

أما symmetric، ففي مثالنا يمر محور الانعكاس بين الموضعين −1 و0 عند البداية، وبين 2 و3 عند النهاية. لذلك يأخذ −1 قيمة 2، ويأخذ −2 قيمة 5. في الطرف الآخر، يأخذ 3 قيمة 9، ويأخذ 4 قيمة 5.

تكون السلسلة [5,2,2,5,9,9,5]. نرى نسختين متجاورتين من الطرف 2 عند البداية، ومن الطرف 9 عند النهاية. لذلك لا يكفي قول «انعكاس» وحده لتحديد القيم التي ستدخل نافذة الحافة؛ يجب تحديد موضع محور الانعكاس.

تكرر edge قيمة الطرف في الامتداد الخارجي. [1]

في المثال تعطي edge السلسلة [2,2,2,5,9,9,9]. الجار الأول خارج الحدود يوافق symmetric، لكن الجار الثاني يختلف: −2 يساوي 2 مع edge و5 مع symmetric. الاتفاق في موضع واحد لا يجعل التمديدين متساويين.

احسب المتوسط عند الحافة

نعرف بأنفسنا متوسطًا مركزيًا q[n]=(e[n−1]+e[n]+e[n+1])/3، حيث e هي السلسلة الممتدة. نحسب q عند المواضع الأصلية 0 و1 و2 فقط. كل قيمة تدخل بوزن 1/3، ونستخدم كسورًا دقيقة.

عند 0، نافذة reflect هي [5,2,5] ومجموعها 12، فيكون المتوسط 4. نافذة symmetric هي [2,2,5] ومجموعها 9، فيكون المتوسط 3. لم تتغير قيمة المشاهدة الأصلية الأولى 2؛ تغير جارها المفترض قبل السجل.

عند 1، النافذة في الحالتين [2,5,9]، فتكون النتيجة 16/3. لا تحتاج هذه النافذة إلى أي موضع خارج السجل، ولذلك لا تتأثر باختيار قاعدة التمديد في مثالنا.

عند 2، نافذة reflect هي [5,9,5] فتعطي 19/3، ونافذة symmetric هي [5,9,9] فتعطي 23/3. إذن النتائج على المواضع الأصلية هي [4,16/3,19/3] مقابل [3,16/3,23/3]. الاختلاف يظهر عند طرفي السلسلة.

مع edge، المتوسط ذو الثلاث قيم يساوي [3,16/3,23/3] أيضًا؛ النافذة عند الطرف تستخدم أول جار خارجي فقط. هذه المساواة المحددة لا تثبت أن symmetric وedge قاعدة واحدة. سنكبر النافذة لاختبار ذلك.

عند 0، نأخذ خمس قيم من −2 إلى 2، ونقسم مجموعها على 5. مع reflect النافذة [9,5,2,5,9]، والنتيجة 30/5=6. مع symmetric هي [5,2,2,5,9]، والنتيجة 23/5. مع edge هي [2,2,2,5,9]، والنتيجة 20/5=4. اختلاف الجار الثاني صار ظاهرًا في الناتج.

متوسط الثلاث قيم عند الموضع صفر: reflect يساوي 4 وsymmetric وedge يساويان 3. متوسط خمس قيم عند صفر: reflect يساوي 6 وsymmetric يساوي 23 على 5 وedge يساوي 4.
الاتفاق في نافذة واحدة لا يثبت تساوي قواعد التمديد.

اقرأ اسم القاعدة في المكتبة المستخدمة

SciPy reflect يعيد الطرف، وmirror لا يعيده: يوافقان NumPy symmetric وreflect على التوالي في الامتداد. [1] [2]

لتطبيق المقارنة على مثالنا، اسم reflect في NumPy يعني أن الجار السابق للموضع 0 يأخذ 5. اسم reflect في SciPy يعني أن ذلك الجار يأخذ 2. نقل الاسم نفسه حرفيًا من مكتبة إلى أخرى قد يغير القيمة التي تدخل الحساب عند البداية.

pad يزيد طول المصفوفة؛ correlate1d يحسب ارتباطًا ويعيد شكل المدخل. [1] [2]

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

القيم المضافة تعبر عن افتراض: هل نجعل أول جار نسخة من الطرف، أم نأخذه من العينة التالية داخل السجل؟ لا تختبر القاعدة ما حدث فعليًا قبل أول مشاهدة أو بعد آخرها. اختيار تمديد لا يضيف دليلًا على وجود هذه القيم في تجربة حقيقية.

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

نقصر الشرح على انعكاس even لسلسلة أحادية البعد من ثلاث قيم وحشو قيمتين في كل جهة. لا نفحص odd أو زوايا المصفوفات متعددة الأبعاد. لم نشغل NumPy أو SciPy؛ تحققنا من الكسور ومن طريقتين مستقلتين لتحديد فهارس الانعكاس ضمن نطاق اختبارات محدد.

القاعدة في المثالثلاث قيم عند 0خمس قيم عند 0
NumPy reflect46
NumPy symmetric323/5
NumPy edge34

للتوسع: السعة والتردد في الموجات.

المراجع

  1. NumPy — pad
  2. SciPy — correlate1d

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