الحقول غير المذكورة في order تُستخدم لكسر التعادل أيضًا. [1]
ما المفتاح الفعلي؟
الحقول غير المذكورة في order تُستخدم لكسر التعادل أيضًا. [1]
stable=True يحفظ الترتيب النسبي للقيم التي تتساوى في المقارنة. [1]
ننشئ مصفوفة سجلات ذات حقلين من int64، اسمهما group ثم score في dtype. هذه حقول مسماة داخل كل عنصر، وليست صفوف مصفوفة عددية ثنائية البعد. الأسماء والأعداد مؤلفة للتعليم بلا معنى عن جودة سجلات فعلية.
رقم الموضع من صفر إلى أربعة أداة خارجية لتتبع العناصر. لا نخزنه حقلًا ثالثًا في dtype؛ إضافته إلى السجل قد تغير المقارنة نفسها. لذلك نقرأ الفهارس المعادة ونربطها بالقائمة الأصلية.
نريد مقارنة طلبين: فرز السجل مع ذكر group في order، وفرز قيم group المستخرجة وحدها. يتفق اسم الحقل الأساسي، لكن المدخل الذي تقارنه الدالة في الطلبين مختلف.
فهارس مختلفة
على NumPy 2.3.5 وCPython 3.12.14 أنشأنا a=np.array([(2,9),(1,7),(2,4),(1,3),(1,7)],dtype=[("group","i8"),("score","i8")]). الشكل (5,)، وكل عنصر يحمل زوجًا من الأعداد الصحيحة.
نفذنا p=np.argsort(a,order="group",stable=True). رجعت [3,1,4,2,0]؛ قراءة a[p] أعطت [(1,3),(1,7),(1,7),(2,4),(2,9)]. كل سجلات group=1 تسبق group=2، وداخل كل مجموعة تتقدم score الأصغر.
الموضع 3، ذو السجل (1,3)، تقدم على الموضع 1، ذي السجل (1,7)، رغم أن group يساوي 1 في الاثنين. لم تُكسر قاعدة الاستقرار؛ هذان السجلان مختلفان في الحقل الآخر الذي شارك في المقارنة.
ثم نفذنا q=np.argsort(a["group"],stable=True). رجعت [1,3,4,0,2]. قيم group المرتبة هي [1,1,1,2,2]، لكن السجلات المقروءة بـa[q] هي [(1,7),(1,3),(1,7),(2,9),(2,4)].
في الطلب الثاني حفظنا ترتيب المواضع 1 ثم 3 ثم 4 داخل group=1، وصفر ثم 2 داخل group=2. ليست score تصاعدية هنا، وهذا متوقع من الطلب الذي قارن حقلًا واحدًا فقط. تنقل الفهارس بقية السجل معه دون جعل بقية الحقول مفاتيح للفرز.
تعادل كامل وتحكم
في المصدر يحمل الموضعان 1 و4 السجل (1,7) نفسه. في p جاء 1 قبل 4، وفي q جاء 1 قبل 4 أيضًا. هذه مقارنة لهويتَي ظهورين، لا حذف أحد السجلين المتساويين؛ بقي طول كل قائمة فهارس خمسة.
على a نفسها، أعطى order=["group"] القائمة p نفسها. وأعطى order=["group","score"] القائمة p نفسها كذلك. عدم كتابة score في قائمة order الأولى لم يستبعده من كسر التعادل في سجلاتنا.
أنشأنا تحكمًا مستقلًا C=[(2,0),(1,0),(2,0),(1,0),(1,0)] بالنوع نفسه. مع order="group" وstable=True رجعت [1,3,4,0,2]، أي قائمة q. أصبح الحقل الآخر متساويًا داخل كل مجموعة، فصار تعادل المجموعة تعادلًا كاملًا في هذا التحكم.
التحكم يغير قيم score؛ لا نحذف الحقل من dtype ولا نغير الخيار. لذلك نفصل بين سبب اتفاق التحكم وبين سبب اختلاف p وq في المدخل الأول. اختلاف المحتوى قد يخفي أثر حقل ما زال موجودًا في المقارنة.
نفذنا أيضًا np.sort(a,order="group",stable=True). رجعت القيم الخمس الموافقة لـa[p]. هذا فحص لمراسلة القيم والفهارس، ولا يجعل أرقام p قيمًا من group أو score. بايتات المدخل وقراءة حقل group بقيتا ثابتتين.

مرجع ونطاق
بنى المرجع قائمة المواضع بإدراج مستقر في Python: لكل موضع جديد، يقارن مفتاحه بالموجودين ويضعه بعد المفاتيح المساوية. لم يستدعِ argsort أو sort أو lexsort من NumPy، ولم يستعمل sorted لبناء التوقع.
بنى التوقع الأول من الزوج (group,score)، والثاني من group وحده. نراجع التعادل بحسب المفتاح نفسه الذي استعمله كل مرجع، لا بحسب عمود مختار بعد ظهور النتيجة. استعملنا sorted فقط للتحقق أن الفهارس تبديل كامل من صفر إلى أربعة.
لشبكة الفحوص، لكل سجل أربعة أزواج ممكنة: (0,0) و(0,1) و(1,0) و(1,1). مع خمسة سجلات توجد 4**5=1024 قائمة. أضفنا المثال المعلن منفصلًا، إذ يتضمن الأعداد 2 و3 و4 و7 و9 خارج هذه الأبجدية.
لكل حالة عشرة فحوص: الفهارس المركبة مقابل مرجعها، وفهارس الحقل المفرد، وصيغة order بقائمة حقل واحد، وصيغة الحقلين الصريحة، وقيم sort، وحفظ التعادل الكامل، وحفظ تعادل الحقل المفرد، وشمول الفهارس وشكلها ونوعها، وثبات المدخل، وتحكم الحقل الثانوي الثابت. مرت 1025×10=10250 فحصًا.
النطاق خمسة سجلات، وحقلان من int64 بترتيب group ثم score، وتصاعد وstable=True. لا يشمل حقولًا إضافية أو نصوصًا أو NaN أو object أو محاور متعددة أو تنازلًا أو الخوارزمية الافتراضية غير المعلنة أو الزمن والذاكرة. لا نستخرج من اتفاق حالتين ضمانًا لمفاتيح مختلفة.
| الطلب | الفهارس |
|---|---|
| سجلات order=group | 3، 1، 4، 2، 0 |
| حقل group وحده | 1، 3، 4، 0، 2 |
| تحكم score=0 | 1، 3، 4، 0، 2 |
للتوسع: فهارس argsort.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
