تقنية

unique_counts: هل تطابق تكرارات unique الافتراضية؟

القيم والتكرارات مع الواجهتين الافتراضيتين.
تجميع مختلف للوسوم نفسها.

أعادت unique_counts خمس خانات من متجهنا، بينما أعادت unique مع return_counts=True ثلاثًا. لم يتغير المتجه؛ سنقرأ اختلاف السياسة الافتراضية، ثم نثبت الخيار ونقارن تحكمًا محدودًا.

راجع السياسة قبل تبديل الواجهة

توثق unique_counts بديلًا يستعمل equal_nan=False، بينما الإعداد الافتراضي في unique هو equal_nan=True. [1][2]

نريد حصيلة قيم وتكرارات لمتجه واحد يحمل ثلاثة مواضع NaN. سنقارن واجهتين تبدوان ملائمتين لهذا الغرض، مع إبقاء المتجه نفسه والنوع نفسه ودون تحديد محور.

لا ننقل النتيجة المفترضة من اسم counts وحده. نحفظ إعداد الاستدعاء إلى جانب القائمة والتكرارات؛ تغيير طريقة الوصول إلى المخارج قد يرافق إعدادًا مختلفًا في تجميع القيم.

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

اقرأ خمس خانات ثم ثلاثًا

على NumPy2.3.5 وCPython3.12.14 أنشأنا A=np.array([281,np.nan,281,np.nan,284,np.nan],dtype=np.float64). الشكل(6,)، والعدد281 يظهر مرتين، و284 مرة، وNaN في ثلاثة مواضع.

نفذنا r=np.unique_counts(A). قرأنا r.values فكانت [281,284,NaN,NaN,NaN]، وr.counts فكانت [2,1,1,1,1]. لكل مصفوفة خمس خانات؛ بقيت مواضع NaN الثلاثة منفصلة في قائمة القيم المعادة.

الخانة الأولى تربط281 بالتكرار2، والثانية تربط284 بالتكرار1. الخانات الثلاث الأخيرة تحمل NaN، وكل منها يقابل العدد1. لا نكتب جدولًا من ثلاثة أسطر فقط ثم ننسبه إلى المخارج التي سجلناها.

رجعت الواجهة كائن namedtuple بحقلَي values وcounts. [1] المخارج مصفوفتان في سجلنا.

نفذنا بعد ذلك u,c=np.unique(A,return_counts=True) على A نفسها. رجعت القيم [281,284,NaN] والتكرارات[2,1,3]. صار عدد الخانات ثلاثًا، واجتمعت المواضع الثلاثة الموسومة في خانة NaN واحدة بتكرار3.

مجموع التكرارات في الطلب الأول2+1+1+1+1=6، وفي الثاني2+1+3=6. اتفاق المجموع مع طول المدخل لا يجعل القائمتين متساويتين؛ تغيرت طريقة توزيع المواضع على خانات الحصيلة.

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

ثبّت الخيار وجرب تحكمًا محدودًا

نفذنا np.unique(A,return_counts=True,equal_nan=False). رجعت القيم [281,284,NaN,NaN,NaN] والتكرارات[2,1,1,1,1]، موافقةً حقلي unique_counts في المثال. تغير الخيار في unique، ولم نغير A أو نطلب صفوفًا متعددة الأعمدة.

يساعد التحكم على تحديد سبب اختلاف الطلبين الافتراضيين. لا يكفي أن تتشابه أسماء المخارج أو أن يحمل الطلبان return counts في وصفهما؛ نراجع سياسة التعامل مع NaN كما استُخدمت فعليًا.

أنشأنا تحكمًا منفصلًا C=[281,290,281,290,284,290] من float64 بالشكل(6,). استبدلنا كل موضع NaN بالعدد290 الذي اخترناه للتعليم، لا لاستعادة قيمة مجهولة.

أعطت unique_counts على C القيم[281,284,290] والتكرارات[2,1,3]. اجتمعت مرات العدد290 الثلاث في خانة واحدة؛ ليس مثال الفصل السابق قاعدة تمنع تجميع كل قيمة متكررة.

قد يتغير ترتيب unique_counts في إصدار لاحق. [1] نطاقنا NumPy2.3.5 فقط.

نحفظ معنى التحكم: إزالة الوسم من مدخل مؤلف تصنع حالة محدودة تختلف عن A. نجاح حصيلة C لا يقرر قيمة مناسبة لملء بيانات فعلية.

الخيار False والتحكم المحدود وتعداد المخارج.
خيارات التجميع وعناصر السجل.

افصل الحاوية من عناصرها

قبل استيراد NumPy، بنى مرجع Python المتجه الموسوم لكل n من281 إلى297: [n,NaN,n,NaN,n+3,NaN]. عد القيم المحدودة مباشرة، ثم بنى توقعين: ثلاثة أسطر موسومة بتكرار1، أو سطر موسوم بتكرار3.

بنى أيضًا التحكم المحدود باستبدال الوسم بـn+9. لم يستدعِ unique أو unique_counts أو فرز NumPy لبناء التوقع. قارنا القيم الموسومة والتكرارات بالشكل والنوع الفعليين، وفحصنا ثبات بايتات المدخل بعد كل طلب.

في كل واحدة من17 حالة نفذنا أربعة نداءات: unique_counts، وunique الافتراضية مع التكرارات، وunique مع False، وunique_counts على التحكم المحدود. الإجمالي17×4=68 نداءً ناجحًا دون أخطاء.

رجع34 كائن namedtuple و34 حاوية من builtins.tuple. تحتوي كل عودة مصفوفتي القيم والتكرارات، فحفظنا136 سجل مصفوفة داخل تلك الحاويات. نفصل هذا العدد عن عدد نداءات الواجهتين.

مجموع عناصر المخارج544، منها425 عنصرًا عدديًا محدودًا أو عدد تكرار، و119 موضعًا موسومًا NaN. في JSON كتبنا الوسم نصًا"NaN"، ولم نسجل544 عددًا محدودًا أو نعامل119 وسمًا كقياسات جديدة.

لكل حالة32 عنصرًا في المخارج الأربعة:10 ثم6 ثم10 ثم6. بينها25 عنصرًا عدديًا و7 مواضع NaN؛ عبر17 حالة يصبح المجموع425 و119. حفظ النوع الأصلي يميز أعداد القيم float64 من تكرارات int64.

اقتصرنا على متجهات float64 أحادية من ست خانات والأعداد والوسوم المذكورة وإصدار2.3.5. لم نفحص صفوفًا مركبة أو محاور أو أنواعًا أخرى أو لانهاية أو حمولات NaN أو الفراغ أو فهارس إعادة البناء أو الأداء والذاكرة أو إصدارًا آخر.

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

Own requestValue entriescounts
unique_counts52,1,1,1,1
unique default32,1,3
unique False52,1,1,1,1
finite control32,1,3

للتوسع: القيم الفريدة وإعادة الترتيب.

المراجع

  1. NumPy unique_counts
  2. NumPy unique

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