علوم وفضاء

count_nonzero في NumPy: هل النص «0» صفر؟

العدد 0 والقيمة المنطقية False يفشلان اختبار الصدق. النصان 0 وFalse غير فارغين وينجحان؛ النص الفارغ يفشل والمسافة المفردة تنجح. حالات مستقلة في نموذجنا.
نوع الخانة جزء من معنى اختبارها.

count_nonzero تعد العناصر التي تحقق الصدق المنطقي، بما فيها النص غير الفارغ. [1]

ابدأ بمعنى الصدق لا بحروف النص

في بايثون، الصفر العددي والسلسلة النصية الفارغة من القيم التي تحقق False. [2]

نؤلف جدول النصوص T من صفين: الصف الأول يحمل "0" ثم "" ثم "False"؛ والثاني "" ثم " " ثم "". علامات الاقتباس توضح النوع، وليست محارف نضيفها إلى النص. بين اقتباسي " " مسافة واحدة، أما "" فلا يحمل أي محرف.

نفحص طول النص في كل خانة. النص "0" طوله 1، و"False" طوله 5، والمسافة طولها 1. في المقابل طول كل نص فارغ صفر. لذلك يطابق ثلاثة من نصوصنا اختبار غير فارغ، ويفشل ثلاثة.

الصف الأول يضم نصين غير فارغين، والثاني نصًا واحدًا. نحصل على عد صفوف [2,1] وعد أعمدة [1,1,1]. لم نقرأ "0" بوصفه عددًا أو "False" بوصفه قيمة منطقية؛ أبقينا نوع النص معلنًا.

نقارن حالات منفصلة: العدد 0 يفشل اختبار الصدق، والنص "0" ينجح. وكذلك القيمة المنطقية False تفشل والنص "False" ينجح. النتيجة لا تقول إن عبارة مكتوبة بالحروف صحيحة في الواقع؛ إنها اختبار تقني على القيمة ونوعها.

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

جداولنا العددية والنصية منفصلة. لا نصنع مصفوفة مختلطة ولا ندعي نتيجة تحويل النوع تلقائيًا في NumPy. فحص bool هنا تنفيذ بايثون على القيم المفردة، والحساب المجمع نموذج مستقل للقاعدة الموثقة.

ميز عدد الخانات من مجموع قيمها

تصف count_nonzero العد بحسب الصدق، ويشمل ذلك الأعداد غير الصفرية. [1]

نؤلف A=[[0,-5,0],[4,0,-2]] بصفين وثلاثة أعمدة، ونرقم مواضعها من صفر. الأعداد بلا وحدة وليست بيانات مستخدم أو قياسات. المطابقات −5 عند (0,1)، و4 عند (1,0)، و−2 عند (1,2).

نعطي كل خانة مطابقة مساهمة واحدة في العد: 1+1+1=3. علامتا السالب لا تستبعدان −5 و−2. أما شرط أكبر من صفر فيختار 4 وحدها، فيكون عد الموجبة 1.

جمع قيم A سؤال آخر: 0−5+0+4+0−2=−3. لا نقسم هذا المجموع على قيمة ثابتة لاستعادة عدد الخانات؛ إلغاء بعض القيم بعضها لا يجعل خاناتها أصفارًا.

ولو استبدلنا −5 و4 و−2 بالقيم −50 و40 و−20، مع بقاء الأصفار كما هي، يبقى عدد المطابقات 3 ويصير مجموع القيم −30. عدد الخانات لم يتبع مقدار الرقم المخزن فيها.

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

اقرأ العد مع محوره وشكله

الافتراضي axis=None للعد الكلي؛ اختيار محور يعطي عدًا عليه، وkeepdims يبقي المحاور المعدودة بطول 1. [1]

مع axis=0 نعد عبر الصفين لكل عمود. عمود A الأول 0 و4، والثاني −5 و0، والثالث 0 و−2؛ توجد مطابقة واحدة في كل منها. قائمة العد [1,1,1] ذات شكل (3,). هذه أعداد خانات لا أرقام صفوف مختارة.

ومع axis=1 نعد عبر الأعمدة داخل كل صف. الصف الأول يضم −5 وحدها، والثاني 4 و−2؛ النتيجة [1,2] ذات شكل (2,). العنصر الثاني 2 لا يعني العمود ذي الفهرس 2؛ يعني وجود خانتين مطابقتين في الصف الثاني.

مع حفظ المحور في العد عبر الصفوف، تظهر [1,1,1] في صف واحد، بالشكل (1,3). ومع العد داخل كل صف تظهر 1 في الصف الأول و2 في الثاني، ضمن عمود واحد بالشكل (2,1). التنظيم لا يضيف مطابقة جديدة.

نراجع العدد الكلي بجمع عد الصفوف: 1+2=3، أو عد الأعمدة: 1+1+1=3. تساوي الطريقتين في نموذجنا يرجع إلى أن كل خانة تنتمي إلى صف واحد وعمود واحد، ونستعمل الشرط نفسه.

إذا استعملنا T النصية، يتغير عد الصفوف إلى [2,1] رغم بقاء عد الأعمدة [1,1,1] والكلي 3. لذلك لا تكفي قراءة العدد 3 وحده لمعرفة نوع القيم أو توزيعها بين الصفين.

A صفاها 0 وسالب 5 و0، ثم 4 و0 وسالب 2. B صفاها 4 و0 و0، ثم 0 وسالب 5 وسالب 2. الكلي 3 وعد الصفوف 1 و2 والأعمدة 1 و1 و1 في كليهما؛ موضعان مختلفان.
تساوي مجاميع العد لا يعيد هوية الخانات.

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

نؤلف B=[[4,0,0],[0,-5,-2]]. الآن المطابقات في (0,0)، (1,1)، (1,2)، بينما كانت في A في (0,1)، (1,0)، (1,2). انتقل موضعان، وبقي الثالث كما هو.

عد B داخل الصفوف [1,2]، وعدها عبر الصفوف لكل عمود [1,1,1]؛ كليها 3. حتى الاحتفاظ بقائمتَي المجاميع معًا لا يميز A من B في هذا المثال. وهو برهان بمثالين معلومين على أن هذه المجاميع لا تحدد مواضع المطابقات دائمًا.

ولا تقول المجاميع هل الرقم الموجود في الخانة المطابقة 4 أم −5؛ القيمة أيضًا اختفت من تقرير العد. إذا كان المطلوب معرفة أي خانة تحتاج مراجعة، نحتفظ بالمواضع أو القناع والأصل، مع سؤال الاختيار، بدل محاولة فك العد إلى بيانات لم يعد يحملها.

نختبر كل توزيع من القيم −1 و0 و1 في الخانات الست، وعددها 729، وكل توزيع من النصوص الفارغ و"0" و"False" والمسافة، وعددها 4096. جميعها من الشكل (2,3).

نقارن عد bool في بايثون بمسح مستقل يعتمد عدم مساواة الصفر للأعداد وطول النص للنصوص، ثم يعد الإحداثيات بحسب صفها وعمودها. نراجع القوائم كاملة وحدودها وحفظ الكلي وتنظيم المحور المفرد.

هذا فحص محدود للقيم المنفردة ونموذج جداولنا؛ لم نشغل NumPy. لا نفحص الأنواع المختلطة أو الكائنات المخصصة أو NaN أو أطوالًا صفرية أو رتبًا أخرى أو محاور متعددة معًا، ولا ذاكرة أو زمنًا.

الجدول المؤلفالكليعد الصفوفعد الأعمدة
A العددية31، 21، 1، 1
B العددية31، 21، 1، 1
T النصية32، 11، 1، 1

للتوسع: الأبعاد والقطر والمنقول.

المراجع

  1. NumPy — count_nonzero
  2. Python — truth testing

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