unique يعيد القيم المختلفة، ويمكن طلب فهارس الظهور وإعادة البناء والتكرارات. [1] نميزها بمثال واحد، لأن قوائم الأعداد الناتجة لا تؤدي الدور نفسه.
اقرأ القيم وفهارس أول ظهور
نختار a=[7,2,7,5,2,7]، ونرقم مواضعه من 0 إلى 5. القيمة 7 تظهر في المواضع 0 و2 و5، والقيمة 2 في 1 و4، والقيمة 5 في 3. القائمة مؤلفة، وليست تسجيلًا لبيانات حقيقية.
مع النتيجة المرتبة، نحذف تكرار القيم من قائمة العرض ونكتب u=[2,5,7]. عدد المشاهدات الأصلية 6، وعدد القيم المختلفة 3. المقصود هنا تساوي الأعداد الصحيحة نفسها، ولا نقارن سجلات ذات أعمدة أو أسماء متشابهة.
يوفر return_index فهارس أول ظهور للقيم الفريدة في المدخل. [1]
أول 2 في a يقع عند 1، وأول 5 عند 3، وأول 7 عند 0؛ لذلك i=[1,3,0]. ترتيب هذه الفهارس يتبع ترتيب القيم في u، ولا يتبع ترتيب المواضع في a. ليست i قائمة تصاعدية، رغم أن u تصاعدية.
نقرأ a عند 1 فنجد 2، وعند 3 فنجد 5، وعند 0 فنجد 7. إذن اختيار a وفق i يعطي [2,5,7]. هذا تحقق من معنى الإحالة: كل عنصر في i يحدد موضعًا في القائمة الأصلية، ويقابل قيمة واحدة في u.
لا يدل اختيار أول ظهور على أن هذه المشاهدة أدق أو أحدث من غيرها؛ نستخدمه لتحديد موضع وفق ترتيب أعلنّاه. وإذا كان لكل مشاهدة معنى مستقل، تبقى كل المشاهدات موجودة في a، حتى لو عرضنا ملخص القيم المختلفة.
أعد القائمة بفهرس كل موضع
يوفر return_inverse فهارس من قائمة القيم الفريدة لإعادة بناء المدخل. [1]
في u=[2,5,7] تحمل القيمة 2 الفهرس 0، والقيمة 5 الفهرس 1، والقيمة 7 الفهرس 2. لكل موضع أصلي في a، نكتب فهرس قيمته في u. بذلك يكون j=[2,0,2,1,0,2]؛ طوله 6، مثل طول a.
الموضع الأصلي الأول يحمل 7، فنكتب 2؛ الثاني يحمل 2، فنكتب 0؛ والثالث يحمل 7، فنكتب 2. نكمل بالطريقة نفسها: قيمة 5 رمزها 1، ثم 2 رمزها 0، ثم 7 رمزها 2. هذه رموز إحالة إلى u، وليست قيمًا بديلة لها معنى عددي مستقل.
عند إعادة البناء، نقرأ u عند 2 ثم 0 ثم 2 ثم 1 ثم 0 ثم 2. نحصل على [7,2,7,5,2,7] بالترتيب نفسه. أما i فطوله 3 ويختار من a؛ الخلط بينه وبين j يغير طول النتيجة والجهة التي نأخذ منها القيم.
الحجة عامة في نموذجنا: لكل موضع k، عرفنا j[k] بأنه موضع a[k] داخل u. لذلك u[j[k]]=a[k] بالتعريف. تطبيق هذه المساواة على جميع المواضع يعيد القائمة كاملة، لا مثالها الأول فقط.
نحتفظ بـu مع j. إذا أرسلنا قائمة الرموز وحدها، فلن يعرف القارئ أن 2 تعني 7 في هذا القاموس؛ يمكن لقائمة قيم أخرى أن تعطي الرمز نفسه معنى مختلفًا. الإحالة لا تحمل قيمة عنصرها دون القائمة التي تشير إليها.
ميز التكرارات من ترتيب المشاهدات
يوفر return_counts عدد مرات ظهور كل قيمة فريدة. [1] ويكرر repeat العناصر بعدد التكرارات المحدد. [2]
نعد القيم في a: القيمة 2 ظهرت مرتين، و5 مرة، و7 ثلاث مرات. إذن c=[2,1,3] بمحاذاة u=[2,5,7]، ومجموعها 2+1+3=6. لا نطابق العدد 2 في c مع الموضع الأصلي 2؛ إنه تكرار القيمة الأولى في u.
إذا كتبنا 2 مرتين، و5 مرة، و7 ثلاث مرات متجاورة، تصبح القائمة [2,2,5,7,7,7]. طولها 6، وحصيلة كل قيمة فيها صحيحة، لكنها ليست a بترتيبه الأصلي. احتفظنا بتعدد القيم، وفقدنا ترتيبها.
لنقارن بالقائمة b=[2,7,5,7,2,7]. القيم المختلفة فيها [2,5,7]، والتكرارات [2,1,3] أيضًا، لكن فهرس إعادة بنائها [0,2,1,2,0,2]. وجود قائمتين مختلفتي الترتيب ولهما u وc نفسيهما يثبت أن هاتين القائمتين وحدهما لا تحددان الترتيب الأصلي.
التمييز يفيد عند تقرير ما نحتاج حفظه. إذا كانت المهمة حصيلة القيم، فجدول قيمة وتكرار يجيب عنها. وإذا كانت المهمة استعادة تسلسل مشاهدات، فنحتاج إحالة كل موضع. لا نصِف الملخص بأنه نسخة كاملة من التسلسل إذا حذفنا هذه المعلومة.
لا نحول تكرر القيمة إلى حكم بأن إحدى المشاهدات خطأ. ثلاث مشاهدات تحمل 7 قد تكون ثلاث وقائع مطلوبة. المثال الحالي يحسب تمثيل الأعداد؛ لا يختار صفًا للحذف ولا يتحقق من هوية أحداث أو محتويات ملفات.

أعد ترميز الفهارس عند تغيير ترتيب القيم
قد تبقى القيم مرتبة حتى مع sorted=False؛ التوثيق لا يضمن ترتيب أول ظهور بهذا الخيار. [1]
نختار بأنفسنا عرض القيم حسب أول ظهورها في a. الفهارس الأولى i=[1,3,0]، وأصغرها 0 يخص القيمة 7، ثم 1 يخص 2، ثم 3 يخص 5. تصبح قائمة العرض الجديدة v=[7,2,5]. لم نغير a، بل ترتيب قاموس القيم.
لو استخدمنا j القديم [2,0,2,1,0,2] مع v، فسنحصل على [5,7,5,2,7,5]، وهي قائمة خاطئة لإعادة بناء a. السبب أن الفهرس 2 صار يشير إلى 5 بدل 7، والفهرس 0 صار يشير إلى 7 بدل 2.
نكتب التحويل من فهرس u إلى فهرس v: القديم 0 يتحول إلى 1، والقديم 1 إلى 2، والقديم 2 إلى 0. تطبيق هذا التحويل على j يعطي [0,1,0,2,1,0]. قراءة v بهذه الفهارس تعيد a. وإذا عرضنا التكرارات بمحاذاة v، يجب أن نعيد ترتيبها أيضًا إلى [3,2,1].
الفهارس ليست معرفات دائمة للقيمة بين قوائم مختلفة. مثلًا نضيف 1 في بداية المدخل، فتكون القيم المرتبة [1,2,5,7]. صار فهرس 2 هو 1، وفهرس 5 هو 2، وفهرس 7 هو 3؛ رموز المشاهدات القديمة أصبحت [3,1,3,2,1,3]. القيمة لم تتغير، لكن قائمتها المرجعية تغيرت.
نقصر الشرح على قائمة أحادية البعد من أعداد صحيحة، مع اختيار القيم المرتبة. لا نفحص NaN أو الأعداد المركبة أو الصفوف متعددة الأعمدة أو اختلاف شكل الخرج بين إصدارات المكتبة. لم ننفذ NumPy؛ تحققنا من نموذج القوائم ومن هويات إعادة البناء بمقارنات مستقلة محددة.
| الخرج في المثال | قيمه | إلى ماذا تشير عناصره؟ |
|---|---|---|
| u | [2,5,7] | القيم المختلفة |
| i | [1,3,0] | مواضع في a |
| j | [2,0,2,1,0,2] | مواضع في u |
| c | [2,1,3] | عدد مرات ظهور كل قيمة في u |
للتوسع: الوسيط مع المشاهدات المتكررة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
