علوم وفضاء

intersect1d: هل الفهارس تشمل كل التكرارات؟

قائمتان مؤلفتان؛ المشترك سالب ثلاثة وستة وأحد عشر، وفهارسه الأولى واحد واثنان وصفر في a وواحد وصفر وأربعة في b.
قيمة واحدة؛ فهرس في كل مدخل.

intersect1d يعيد القيم المشتركة مرتبة دون تكرار. [1]

ابدأ بالقيم المشتركة

نؤلف a=[11,−3,6,11,−3,2] وb=[6,−3,7,6,11,−3]. طول كل منهما ستة، ونبدأ فهرسة المواضع من صفر. القيم بلا وحدة ولا تمثل سجلات حقيقية، ونقرأ القوائم من اليسار إلى اليمين.

القيمة 2 موجودة في a وحدها، و7 في b وحدها. أما −3 و6 و11 فتوجد في الجانبين، فتكون قائمة المشترك المرتبة [−3,6,11]. لا نكتب −3 مرتين لأن لها ظهورين في إحدى القوائم؛ القائمة الحالية تعرض القيم المختلفة.

الترتيب العددي للمشترك لا يساوي ترتيب ظهوره في أي مدخل. تبدأ a بالقيمة 11 وتبدأ b بالقيمة 6، بينما يبدأ المشترك بالقيمة −3. سؤال «ما القيم الموجودة في الجانبين؟» منفصل عن سؤال «في أي موضع ظهر كل منها؟».

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

الفهرسان يخصان مدخلين

return_indices=True يعيد فهارس أول ظهور للمشترك في المدخلين. [1]

في a، أول −3 عند 1، وأول 6 عند 2، وأول 11 عند صفر؛ إذن فهارسها [1,2,0] بمحاذاة المشترك [−3,6,11]. وفي b، أول −3 عند 1، وأول 6 عند صفر، وأول 11 عند 4؛ فهارسها [1,0,4].

نقرأ كل قيمة مع فهرسيها: −3 يقابل الزوج (1,1)، و6 يقابل (2,0)، و11 يقابل (0,4). الفهرس الأول يخص a والثاني b. تساوي رقمَي الفهرس في الزوج الأول لا يعني أن القائمتين نفس التسلسل.

القراءة من a وفق [1,2,0] تعطي [−3,6,11]، والقراءة من b وفق [1,0,4] تعطيها أيضًا. هذا فحص محاذاة بين ثلاث قوائم؛ لا نختار من b بفهارس a لمجرد أن طول المدخلين متساوٍ.

فهارس a ليست مرتبة تصاعديًا: 1 ثم 2 ثم صفر. إنها تتبع ترتيب قيم المشترك، لا ترتيب المواضع الأصلية. فرز الفهارس وحدها إلى [0,1,2] يعطي من a القيم [11,−3,6]، فيفقد ترتيب المحاذاة السابق.

s.index(x) يعيد فهرس أول ظهور. [2] استخدمناه في نموذج قوائم مستقل، مع مقارنة ثانية تعد كل أزواج المواضع المتساوية؛ لا نصف النموذج بأنه تشغيل intersect1d.

ثلاثة أزواج لا تشمل ثمانية

لنعد جميع أزواج المواضع، لا أول زوج فقط. تظهر −3 في a عند 1 و4، وفي b عند 1 و5. الأزواج الأربعة هي (1,1)، (1,5)، (4,1)، (4,5). أما اختيار أول ظهور في الجانبين فيحتفظ بالزوج (1,1) وحده لهذه القيمة.

القيمة 6 تظهر في a عند 2، وفي b عند صفر و3. أزواجها (2,0) و(2,3). والقيمة 11 تظهر في a عند صفر و3، وفي b عند 4، فتكون أزواجها (0,4) و(3,4).

مجموع الأزواج 4+2+2=8، لكن ممثلي أول ظهور ثلاثة فقط. الرقم ثمانية يعد اقترانات مواضع، والرقم ثلاثة يعد قيمًا مشتركة مختلفة مع زوج أول لكل قيمة. لا نسمي كل اقتران واقعة جديدة أو أفضل تطابق؛ إنه نتيجة شرط مساواة عددي اخترناه.

نعكس a إلى [2,−3,11,6,−3,11] ونبقي b كما هي. القيم المشتركة لم تتغير، لكن فهارسها في a المعكوسة [1,3,2]. أول −3 الآن جاء من الموضع القديم 4، وأول 11 من القديم 3؛ اختيار «الأول» لا يثبت هوية مشاهدة ثابتة بعد إعادة الترتيب.

أما تبديل a وb دون تغيير ترتيب كل منهما، فيبقي [−3,6,11] ويبدل دور قائمتي الفهارس: الأولى [1,0,4] والثانية [1,2,0]. نحفظ اسم المدخل مع فهارسه، ولا ننقل الأرقام وحدها بين القوائم.

سالب ثلاثة له أربعة أزواج مساواة، وستة له زوجان وأحد عشر له زوجان؛ المجموع ثمانية، مقابل ثلاثة ممثلين لأول ظهور.
كل الأزواج أوسع من ممثلي الأول.

افتراض التفرد وحدود الفحص

افتراض التفرد مع تكرارات قد يفسد النتائج أو الفهارس. [1]

في قوائمنا تكرارات ظاهرة، لذلك نبقي assume_unique=False. لا نحذف التكرارات يدويًا ثم نستخدم فهارس قائمة أقصر للإشارة إلى الأصل؛ إذا غيرنا المدخل تغيرت الجهة التي تشير إليها أرقام المواضع.

فحصنا كل 1600 زوج من 40 قائمة، أطوالها من صفر إلى ثلاثة وقيمها من −2 وصفر و5. تتضمن الأزواج مدخلًا خاليًا، وقائمتين بلا مشترك، وتكرار قيمة في أحد الطرفين أو كليهما. قارنا تقاطع مجموعتين مع أول فهرس ببحث مستقل في جميع أزواج المساواة.

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

اجتاز النموذج 16007 فحوص، منها سبعة أمثلة مباشرة. هذا تحقق من قوائم صحيحة محددة؛ لم نشغل NumPy أو نفحص assume_unique=True أو تسطيح مدخل متعدد الأبعاد أو NaN أو أنواع الكائنات أو الذاكرة أو الأداء. لم نشغل ربطًا في pandas أو SQL.

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

القيمةفهارس aفهارس bعدد كل الأزواجزوج الأول
−31، 41، 54(1,1)
620، 32(2,0)
110، 342(0,4)

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

المراجع

  1. NumPy — intersect1d
  2. Python — Sequence index

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