تقنية

array_equiv: هل True تعني وجود عناصر متساوية؟

أشكال فارغة.
نتائج على مدخلات معلنة.

أعادت array_equiv قيمة True لمصفوفة int64 فارغة بالشكل (0,3) أمام صف [131,132,133] بالشكل (1,3). لا توجد عناصر في المصفوفة الأولى. سنحفظ الشكلين ونتيجة المقارنة ونختبر عرضًا غير متوافق.

المقارنة وعدد العناصر

تعيد array_equiv قيمة True عندما يتوافق الشكلان وتساوي العناصر بعضها وفق المقارنة. [1]

تسمح الدالة بتوافق الشكل عبر البث؛ ولا تشترط تماثله دائمًا. [1] نفحص هنا حالة محور بطول صفر، بدل الاكتفاء بمثال متجه وصفوف غير فارغة.

نعلن خمسة مدخلات من int64 لكل مجموعة، ونكتب الشكل مستقلًا عن القيم. كل الأعداد مؤلفة بلا وحدة؛ ليست مخرجات نموذج أو قياسات عن أشخاص، ولا نجعل نتيجة المقارنة شهادة عن بيانات واقعية.

الفارغة بالشكل (0,3) لا تحمل ثلاثة أعداد مخفية. المحور الأول لا يحتوي صفوفًا، وحاصل ضرب الطولين صفر. يظل طول المحور الثاني ثلاثة جزءًا من وصف الشكل الذي نسجله.

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

فارغة وصف غير فارغ

في NumPy 2.3.5 وCPython 3.12.14 أنشأنا e من قائمة فارغة بالنوع int64، ثم جعلنا شكلها (0,3). وأنشأنا r=np.array([[131,132,133]],dtype=np.int64)، بالشكل (1,3). سجّلنا القيم والشكلين قبل المقارنة.

أعادت np.array_equiv(e,r) قيمة True من نوع bool في Python. الناتج قيمة منطقية مفردة؛ لم ترجع الدالة مصفوفة أعداد أو ثلاثة عناصر ناجحة يمكننا استخراجها من e.

يشترط array_equal تماثل الشكل والعناصر. [2] على المدخلين نفسيهما أعادت np.array_equal(e,r) قيمة False. لا نحول الاختلاف إلى تناقض؛ حفظنا اسم الدالة مع كل جواب.

تقارن قاعدة البث المحاور من اليمين، ويقبل طولان متساويان أو طول مفرد. [3] في المثال يتوافق عرض ثلاثة مع ثلاثة، ويقابل صفر طولًا مفردًا. مجال الفهارس المشترك في مرجعنا فارغ؛ لا يوجد صف لنقارن أعداده.

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

بايتات e فارغة قبل النداء وبعده؛ بقي شكلها (0,3) ونوعها int64. وبقيت قيم r وبايتاتها ونوعها وشكلها ثابتة. لم نحذف الصف من r أو نكتب محتواه في e.

العرض والتحكم غير الفارغ

مقارنة np.array_equiv(e,e) أعادت True، وكذلك np.array_equal(e,e). هذا تحكم يستعمل المصفوفة الفارغة نفسها في الطرفين؛ نتفق على الشكل، ويظل عدد العناصر صفرًا.

أنشأنا فارغة أخرى بالشكل (0,4) والنوع int64. أمام e بالشكل (0,3)، أعادت الدالتان False. لا يملك أحد الطرفين عناصر، لكن طولَي العرض ثلاثة وأربعة غير متساويين وغير مفردين.

إذن عبارة «الطرفان فارغان» لا تكفي لوصف جميع مقارنات هذا التشغيل. نحتفظ بكامل الشكل؛ البايتات الفارغة وحدها لا تميز عرض ثلاثة من عرض أربعة.

للتحكم غير الفارغ أنشأنا t=[[131,132,133],[131,132,133]] من int64 بالشكل (2,3). أمام r بالشكل (1,3)، أعادت array_equiv قيمة True وأعادت array_equal قيمة False. هنا توجد عناصر وفهارس فعلية، بخلاف حالة e.

وفي تحكم آخر أبقينا الصف الأول وغيرنا آخر عدد في الصف الثاني إلى134. أصبحت المصفوفة [[131,132,133],[131,132,134]]. أمام r أعادت الدالتان False؛ توافق الشكل للبث لم يلغ اختلاف القيمة في المقارنة غير الفارغة.

الرسوم تعرض النتائج الخمس مع أشكال المدخلات. لا نعد True الأولى دليلًا على أن بيانات الفارغة تطابق قيم الصف واقعةً بواقعة؛ لا توجد فيها وقائع عددية أصلًا.

صفوف معلنة.
تكرار وقيمة متغيرة.

المرجع وسجل المرحلتين

اخترنا n من131 إلى147، والعرض k من3 إلى19 بالتتابع. صف المجموعة قيمه n+j، حيث j من صفر إلىk−1. لكل مجموعة فارغتان بعرضَي k وk+1، وصف واحد، وصفان مكرران، وصفان تغير آخر عنصر فيهما بمقدار واحد.

خمسة أزواج لكل مجموعة، ونداءان لكل زوج:17×5×2=170 نداءً في السجل النهائي. حفظنا170 قيمة bool مفردة، منها68 True و102 False؛ لا توجد مخارج مصفوفية أو عددية أو سجلات خطأ من هذه النداءات.

يوجد85 سجلًا للمدخلات، لكن عدد التمثيلات المتميزة بالشكل والنوع والبايتات69، وعدد البصمات البايتية المتميزة52. تتداخل أشكال بعض الفارغات بين المجموعات، وكل الفارغات تملك صفر بايت؛ لذلك لا نسمي85 سجلًا85 تمثيلًا بايتيًا مختلفًا.

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

بنى مرجع Python توقعات الشكل وفهارس المقارنة من القوائم المعلنة قبل استيراد NumPy. يرفض المحورين غير المتوافقين، ويقارن القيم في الفهارس المشتركة، ويشترط الشكل نفسه لمرجع array_equal. لا يستدعي مقارنة NumPy أو إجراء بث لتوليد المتوقع.

تحققنا من بناء المدخلات ببايتات struct، ومن ثبات النوع والشكل والبايتات بعد النداءات. إنشاء المصفوفات وإعادة تشكيلها وفحوص خصائصها خطوات إعداد؛ عدد170 يخص نداءات المقارنة المسماة وحدها.

النطاق int64 وشكلان بمحورين وعروض معلنة. لم نفحص NaN أواللانهاية أوالمركب أوobject أوالمفرد أوالفئات المشتقة أوتسامحًا عدديًا أوأطوال محاور أخرى أوكتابة أونسخًا أوذاكرة أوأداءً أوإصدارًا آخر.

Own shapesarray_equivarray_equal
(0,3) / (1,3)TrueFalse
(0,3) / (0,3)TrueTrue
(0,3) / (0,4)FalseFalse
row / repeated rowsTrueFalse
row / changed rowsFalseFalse

للتوسع: عقد الشكل.

المراجع

  1. NumPy array_equiv
  2. NumPy array_equal
  3. NumPy broadcasting

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