علوم وفضاء

take في NumPy: الفهرس السالب مع clip

الأصل 6 و18 و25، وطلبات الفهرس سالب 1 وسالب 4 وموجب 5. الالتفاف يختار الموضع 2 ثلاث مرات فيعيد 25 ثلاث مرات. تثبيت الطرف يختار 0 و0 و2 فيعيد 6 و6 و25. الطلب سالب 4 خارج نطاق الاختيار المعتاد.
طلبات مؤلفة؛ حدد سياسة الحدود قبل قراءة القيمة.

في take، يثبت clip الفهرس السالب عند أول عنصر. [1] نميزه من العد من النهاية.

اقرأ الفهرس قبل اختيار القيمة

نؤلف القائمة x=[6,18,25]. نرقم مواضعها 0 و1 و2، ونقرأها من اليسار إلى اليمين. العدد 1 فهرس يشير إلى القيمة 18، ولا يعني أن القيمة المختارة هي 1. هذه أعداد تعليمية، وليست قياسات جهاز.

الفهرسة الصحيحة المعتادة تعد المواضع من الصفر، وتفسر السالب من النهاية. [3]

طول قائمتنا 3؛ للفهرس −1 نضيف الطول مرة واحدة فنصل إلى 2، وللفهرس −3 نصل إلى 0. لذلك يختار الأول 25 والثاني 6. أما −4 فإضافة 3 إليه تعطي −1، وما زال خارج المواضع الثلاثة.

تأخذ take عناصر على محور، وتتيح raise وwrap وclip؛ raise هو الافتراضي، وclip يعطل الفهرسة السالبة. [1]

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

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

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

نكتب في نموذجنا التفاف فهرس صحيح i على طول موجب n بالصورة i mod n، حيث الباقي من 0 إلى n−1. ونكتب تثبيته بالصورة min(max(i,0),n−1). هاتان قاعدتان على المواضع؛ لا نجريهما على قيم x.

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

عند التثبيت، الفهرسان −1 و−4 أدنى من 0 فيصيران 0؛ والفهرس 5 أكبر من 2 فيصير 2. لذلك نقرأ المواضع [0,0,2]، ونحصل على [6,6,25]. الاختلاف ليس تغييرًا لقيم الأصل، بل تغييرًا لجهة الإحالة.

أما الاختيار المعتاد فيقبل فهارس من −3 إلى 2 لقائمة بطول 3. الطلب −4 خارجها، وكذلك 5. وجود أحدهما يمنع إتمام نموذج raise للطلبات كلها؛ لا نقدم الجزء الصالح على أنه جواب ناجح للقائمة كاملة.

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

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

حدد طول المحور وشكل النتيجة

عند عدم تحديد المحور، تستخدم take المدخل المسطح. [1]

نؤلف A=[[6,18,25],[9,21,28]]. الصفان مستقلان في العرض فقط؛ لا نفترض معنى عمليًا لهما. الأعمدة مرقمة 0 و1 و2، ونطلب [-1,0,2,3,5] مع تثبيت الطرف.

إذا اخترنا محور الأعمدة axis=1، يكون طول النطاق 3. تتحول الفهارس إلى [0,0,2,2,2]. من الصف الأول نأخذ [6,6,25,25,25]، ومن الثاني [9,9,28,28,28]. الناتج صفان وخمسة أعمدة؛ لا يشترط أن يساوي عدد الطلبات عدد أعمدة الأصل.

نقارن بإعلان القائمة المسطحة صفًا بعد صف: [6,18,25,9,21,28]. طولها 6، فحدها الأعلى 5. الطلبات نفسها تتحول بالتثبيت إلى [0,0,2,3,5]، فتختار [6,6,25,9,28]. صار الناتج قائمة بخمس قيم، لا صفين.

وبالالتفاف على محور الأعمدة، بواقي الطلبات هي [2,0,2,0,2]. ينتج الصفان [25,6,25,6,25] و[28,9,28,9,28]. أما على التسلسل المسطح، فالبواقي [5,0,2,3,5] وتختار [28,6,25,9,28].

لذلك لا ننقل فهارس جرى تحويلها وفق طول 3 إلى تسلسل طوله 6، ثم نزعم أن الإحالة بقيت نفسها. نذكر المحور وطوله قبل حساب الباقي أو تثبيت الطرف. كما نحتفظ بعدد الطلبات وترتيبها، لأن كل طلب له موضع في الناتج.

تثبيت الفهارس 0 و1 و2 ثم اختيار الأصل 6 و18 و25 يعيد قيمه نفسها. أما قص قيم الأصل إلى المجال من 0 إلى 2 فيعطي 2 و2 و2.
الحد قد يخص موضعًا أو قيمة؛ النتيجتان مختلفتان.

افصل حدود الفهارس من حدود القيم

الدالة clip المستقلة تحد قيم عناصر المصفوفة إلى أطراف مجال. [2]

نختار مجال القيم من 0 إلى 2، ونطبقه على x=[6,18,25]. كل قيمة أكبر من 2، فنستبدلها بالطرف الأعلى 2. النتيجة [2,2,2]. هنا تغيرت الأعداد نفسها وفق مجال أعلنّاه.

في المقابل، نطلب من x الفهارس [0,1,2] باستخدام سياسة تثبيت الفهرس ضمن 0 إلى 2. هذه فهارس صالحة أصلًا، فتظل كما هي، ويكون الاختيار [6,18,25]. الحد الأعلى 2 يخص موقعًا في القائمة، ولا يحد القيمة الموجودة فيه.

نميز المفعول الذي تجري عليه العملية: قص القيم يعالج 6 و18 و25؛ تثبيت الفهارس يعالج 0 و1 و2، ثم يقرأ القيم المرتبطة بها. اشتراك الاسم clip لا يجعل الناتجين متساويين.

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

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

الطلب لقائمة طولها 3موضع wrapموضع clipraise
−120صالح: الموضع 2
−420خارج النطاق
522خارج النطاق

للتوسع: أبعاد المصفوفات وعناصرها.

المراجع

  1. NumPy — take
  2. NumPy — clip
  3. NumPy — integer indexing

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