تقنية

عدد خانات المصفوفة المتناثرة: هل nnz يعد غير الصفر فقط؟

تمييز ثلاث خانات مخزنة عن قيمتين غير صفريتين في مصفوفة ذات ستة مواضع
رسم لتمثيل تعليمي معلن؛ ليس ناتج تشغيل SciPy.

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

الخلاصة السريعة

لا؛ nnz في CSR يعد الخانات المخزنة، ومنها الأصفار الصريحة، بينما count_nonzero يعد القيم غير الصفرية. [1][2]

  • تعرف وثائق nnz العدد بأنه قيم مخزنة، بما فيها الصفر الصريح. [1] اكتب أي نوع من العدد تقصده.
  • في مثالنا ذو ستة مواضع، نعلن ثلاث خانات مخزنة بقيم 5 و 0 و 9 ؛ إذن nnz=3 ، مع وجود قيمتين غير صفريتين فقط.
  • يعد count_nonzero غير الصفر فعلا، ويجمع الخانات المتكررة قبل العد. [2] لا توجد إحداثيات متكررة في مثالنا.
  • الصفر المخزن والصفر غير المخزن يختلفان في وصف التخزين هنا؛ لم نمنحهما معنى قياس مفقود أو نغير شكل الجدول، ولم نشغل SciPy.

أي عدد تريد أن تقرأ؟

يشمل nnz في تعريف SciPy القيم المخزنة والأصفار الصريحة. [1] لذلك لا نعتمد الاسم المختصر وحده لنكتب عنوان «عدد غير الصفر» في تقرير.

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

كيف نعزل الصفر الصريح؟

نؤلف جدولا من صفين وثلاثة أعمدة. في الصف الأول نخزن 5 في العمود الأول، وصفرا في العمود الثالث. وفي الصف الثاني نخزن 9 في العمود الثاني. نعلن أن هذه الخانات الثلاث موجودة فعلا؛ بقية المواضع غير مخزنة وتمثل صفرا في هذا التمرين.

عدد المواضع هو 2×3=6. عدد الخانات المخزنة 3 ، لكن عدد القيم غير الصفرية 2: القيمة 5 والقيمة 9. إذا قسمنا العدد الأول على 6 حصلنا على نصف المواضع؛ وإذا قسمنا الثاني على 6 حصلنا على الثلث. لا نستبدل النسبتين ببعضهما لأن السؤال مختلف.

ما نعدهالعدد في عقدناالتفسير
كل مواضع الجدول6صفان؛ ثلاثة أعمدة
الخانات المخزنة35 و 0 و 9
القيم غير الصفرية25 و 9 فقط

ما الذي يضيفه count_nonzero؟

توضح الوثائق أن count_nonzero يعد القيم غير الصفرية فعلا، مع جمع المدخلات ذات الإحداثيات المتكررة قبل العد. [2]

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

إذا كان ملف آخر يحمل أكثر من مدخل للموضع نفسه، فلا ننقل إليه عدد مثالنا آليا. نراجع تمثيله وقاعدة الجمع التي تحدد القيمة النهائية، ثم نكتب هل التقرير عن التخزين أم عن القيم.

هل يتغير معنى البيانات أو شكلها؟

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

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

نقترح اسمين واضحين في التقرير: «خانات مخزنة» و«قيم غير صفرية»، مع الشكل وسياسة الأصفار. لم نشغل SciPy أو ننظف بيانات مشروع؛ بهذا الوصف يستطيع القارئ تفسير اختلاف العددين دون افتراض خطأ في أحدهما.

المصادر ومتابعة القراءة

  1. SciPy: stored entries nnz (يفتح في نافذة جديدة)docs.scipy.org
  2. SciPy: count_nonzero (يفتح في نافذة جديدة)docs.scipy.org

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