علوم وفضاء

nonzero وargwhere: فهارس المحاور أم أزواج المواضع؟

A صفاها 0 و5 و0، ثم سالب 4 و0 و7. فهارس الصفوف 0 و1 و1، والأعمدة 1 و0 و2. أزواج المواضع 0 و1، ثم 1 و0، ثم 1 و2؛ القيم 5 وسالب 4 و7.
المكونات نفسها مجمعة بمحاورها أو بعناصرها.

nonzero يجمع الفهارس بحسب المحور؛ argwhere يجمعها بحسب العنصر. [1] [2]

ميز تجميع المحاور من المواضع

nonzero يعيد مجموعة فهارس لكل محور بترتيب C؛ argwhere يعيد صفًا لكل عنصر مختار. [1] [2]

نؤلف A=[[0,5,0],[-4,0,7]] بصفين وثلاثة أعمدة. نبدأ ترقيم المواقع من صفر، ونقرأ قيم الصف من اليسار إلى اليمين. الأعداد بلا وحدة، وليست مخرجات نموذج أو قراءة جهاز.

نقرأ الصف الأول ثم الثاني: الصفر عند (0,0) لا يطابق، و5 عند (0,1) تطابق، ثم الصفر عند (0,2) لا يطابق. في الصف الثاني نختار −4 عند (1,0)، ونتجاوز الصفر عند (1,1)، ثم نختار 7 عند (1,2).

إذا جمعنا المكونات بحسب المحور، يكون تنظيمنا [[0,1,1],[1,0,2]]: المجموعة الأولى لأرقام الصفوف، والثانية للأعمدة. الأولى لا تصف ثلاث قيم عددية في A؛ إنها أول مكون من كل موضع مختار.

وإذا جمعنا المكونات بحسب العنصر، يصبح الجدول [[0,1],[1,0],[1,2]]. صفه الأول يصف مكان 5، والثاني مكان −4، والثالث مكان 7. صار كل موضع مكتوبًا مع مكونيه معًا؛ عدد العناصر المختارة لم يتغير.

المجموعتان هنا بطول 3 لكل منهما، بينما جدول المواضع من ثلاثة صفوف وعمودين. لا نفسر عدد مجموعات المحاور، وهو 2، بأنه عدد العناصر المطابقة، وهو 3. كما لا نفرض أن 0 أو 1 قيمة في الخانة المقروءة؛ قد يكون فهرسًا لها.

اقرن الفهارس قبل قراءة القيم

توثق argwhere أن خرجها لا يناسب فهرسة المصفوفات مباشرة، وتوجه إلى nonzero لذلك. [2]

في نموذجنا نقرأ كل موضع صراحة من قوائم مستقلة. الفهرسان الأولان من المجموعتين هما 0 و1، فيحددان A عند (0,1)، وقيمتها 5. الثانيان هما 1 و0 فيحددان −4؛ والثالثان 1 و2 فيحددان 7.

إذن قائمة القيم المختارة [5,-4,7] غير قائمة فهارس الصفوف [0,1,1]. ننقل رقمَي الموضع معًا إذا أردنا تقريرًا يربط القيمة بأصلها، ولا نعرض أرقام المحور على أنها أعداد وجدناها في البيانات.

اختيار كل رقم صف مع كل رقم عمود يغير السؤال. مع ثلاث خانات في كل مجموعة، توجد 3×3=9 قراءات: للصف 0 مع الأعمدة 1 و0 و2 نحصل على [5,0,0]؛ وللصف 1 على [0,-4,7]، ثم القيم الثلاث نفسها مرة أخرى لأن رقم الصف 1 ظهر مرتين.

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

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

حدد شرط اختيار الخانة

يمكن استخدام nonzero على شرط منطقي لاستخراج المواضع التي تحقق True. [1]

نسمي الشرط الأول «القيمة لا تساوي صفرًا». 5 و−4 و7 تحقق هذا الشرط. وجود علامة السالب أمام −4 لا يحولها إلى صفر، ولا يبرر استبعاد موضعها (1,0) من هذه القائمة.

نغير السؤال إلى «القيمة أكبر من صفر». الآن نختار 5 عند (0,1)، و7 عند (1,2)، فنكتب زوجي المواضع [[0,1],[1,2]]. فهارس الصفوف 0 ثم 1، والأعمدة 1 ثم 2؛ انخفض عدد المطابقات إلى اثنتين.

وعند «القيمة أكبر من 6»، تبقى 7 وحدها، في موضع الصف 1 والعمود 2. جدول المواضع له صف واحد ومكونان، بالشكل (1,2). لا نضيف خانة ثانية لمجرد وجود محورين في المصدر.

القناع نفسه جدول منطقي من شكل A. لشرط أكبر من صفر، صفاه [False,True,False] و[False,False,True]. ولشرط أكبر من 6، يصبح الأول كله False والثاني [False,False,True]. نحفظ صيغة الشرط إلى جانب المواضع لأن النتيجة وحدها لا تخبرنا أي سؤال طرحناه.

لم نحذف −4 من A أو نغير قيمتها عند تغيير الشرط؛ تغيرت قائمة المواقع التي نختارها للقراءة. هذا يميز البحث عن المواضع من تعديل المصدر أو حذف عمود كامل.

على A، غير صفري يختار 5 وسالب 4 و7. أكبر من صفر يختار 5 و7؛ وأكبر من 6 يختار 7 عند الصف 1 والعمود 2.
غيّر الشرط فتتغير المواضع؛ السالب غير صفري.

احفظ عدد المحاور عند غياب المطابقات

جدول argwhere له N صفوف وعدد أعمدة يساوي عدد محاور المصدر. [2]

نؤلف جدولًا صفريًا من صفين وثلاثة أعمدة. لا توجد مطابقة لشرط غير صفري، فيكون N=0. في نموذجنا توجد مجموعة خالية لرقم الصف ومجموعة خالية لرقم العمود؛ وجدول المواضع شكله (0,2)، لا (0,3). الثلاثة عدد أعمدة المصدر، والاثنان عدد مكونات موضعه.

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

ولثلاثة محاور، نؤلف B=[[2,0,0],[0,-6,9]] ونضع C=[A,B] بالشكل (2,2,3). أسماء محاوره مجموعة وصف وعمود. المواضع غير الصفرية هي (0,0,1)، (0,1,0)، (0,1,2)، (1,0,0)، (1,1,1)، (1,1,2). جدول المواضع ستة صفوف وثلاثة أعمدة، بالشكل (6,3).

فهارس المجموعة 0 و0 و0 و1 و1 و1؛ فهارس الصف 0 و1 و1 و0 و1 و1؛ فهارس العمود 1 و0 و2 و0 و1 و2. ثلاث مجموعات من ستة مكونات، لا ست مجموعات من ثلاثة مكونات. نقرن المكونات في الموضع نفسه لاسترجاع القيم 5 و−4 و7 و2 و−6 و9.

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

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

الشرط على Aمواضع المطابقاتالقيم
لا يساوي صفرًا(0,1)، (1,0)، (1,2)5، −4، 7
أكبر من صفر(0,1)، (1,2)5، 7
أكبر من 6(1,2)7
جدول صفري؛ لا يساوي صفرًالا مواضع؛ الشكل (0,2)لا قيم

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

المراجع

  1. NumPy — nonzero
  2. NumPy — argwhere

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