علوم وفضاء

nditer.copy: هل تبدأ النسخة من أول عنصر؟

نسخ المكرر عند الموضع الثاني.
النسخة تبدأ عند الحالة المنسوخة.

نسخنا المكرر عند الموضع الثاني. بقيت النسخة هناك حين تقدم الأصل إلى الموضع الثالث في تجربتنا.

نسخ حالة المرور

copy تنسخ المكرر بحالته الحالية. [1]

المتجه والموضع

شغلنا NumPy 2.3.5 على CPython 3.12.14؛ المتجه int64 هو [6,-8,3,11]، وترتيب المرور C. تقدمنا باستدعاء iternext قبل النسخ.

الأعداد مؤلفة. نعتمد المواضع من صفر، فنقرأ العنصر الحالي عبر it[0] ثم نتقدم بـiternext. لا نخلط هذا المسار مع next أو حلقة for على المكرر.

نسخة عند الموضع الثاني

قبل copy كان iterindex=1 والقيمة −8؛ بعد النسخ حمل الأصل والنسخة الموضع 1 والقيمة −8، وكانا كائنين مختلفين.

a=np.array([6,-8,3,11],dtype=np.int64) with np.nditer(a,order="C") as original: original.iternext() with original.copy() as copied: print(original.iterindex,copied.iterindex) original.iternext() print(int(original[0]),int(copied[0]))

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

موضعان وبقيتان مختلفتان.
الأصل تقدم والنسخة بقيت.

تقدم منفصل وبقية القيم

iternext تنفذ خطوة داخلية دون إرجاع قيمة العنصر. [2]

تقدم الأصل وحده إلى الموضع 2 والقيمة 3؛ بقيت النسخة عند 1 والقيمة −8. بقية الأصل [3,11] وبقية النسخة [-8,3,11]. مرت 109 حالات: 109 إنشاءات و109 نسخ و709 نداءات iternext، مع 491 قيمة في البقيتين.

لجمع البقية نقرأ العنصر الحالي ما دامت finished غير صحيحة، ونستدعي iternext بعد كل قراءة. أنهينا الأصل أولًا ثم النسخة، وكان كل منهما في سياق مفتوح.

المرجع المستقل يحدد الموضعين 1 و2 وقيمهما من قائمة Python الأصلية، والبقيتين من الموضع 2 للأصل و1 للنسخة. تضم الشبكة 27 متجهًا بطول 3 و81 بطول 4، من القيم −2 أو صفر أو 3؛ أضفنا المثال فصارت 109 حالات. عدد مساري البقية 218، ومجموع قيمهما 491.

بقيت بايتات المدخل ونوعه وشكله. اقتصر التنفيذ على int64 متجاور أحادي بطول 3 أو 4 وترتيب C ووضع القراءة الافتراضي. لم نفحص كتابة أو نسخ بيانات المدخل أو مكررًا مغلقًا أو تخزينًا مؤقتًا أو مدخلات متعددة أو شرائح أو نطاقات مخصصة أو أداءً أو إصدارات أخرى. لم نستدعِ reset، ولم نختبر خلط next مع iternext.

المرحلةالأصلالنسخة
عند النسخindex 1 / -8index 1 / -8
بعد تقدم الأصلindex 2 / 3index 1 / -8
البقية[3,11][-8,3,11]

للتوسع: القيمة والمحاور.

المراجع

  1. NumPy nditer.copy
  2. NumPy nditer.iternext

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