علوم وفضاء

delete في NumPy: القناع يحذف أم يحتفظ؟

A صفاه 4 وسالب 1 و7؛ 2 و9 و6. القناع True وFalse وTrue على الأعمدة يبقي سالب 1 و9 مع delete، ويبقي الصفين 4 و7؛ 2 و6 مع compress.
أعداد مؤلفة؛ القناع نفسه يحمل معنيين بحسب العملية.

True يحدد الحذف في delete، والإبقاء في compress. [1] [2] نتابع الفرق بجدول مؤلف.

احذف على المحور المختار

delete يزيل المواضع المحددة على المحور المختار. [1]

نؤلف A=[[4,-1,7],[2,9,6]] من صفين وثلاثة أعمدة. الأعداد بلا وحدة، وليست قياسات لمجموعة بيانات. نقرأ كل صف من اليسار إلى اليمين، ونبدأ ترقيم الصفوف والأعمدة من صفر.

محور الصفوف هو axis=0، ومحور الأعمدة axis=1 في جدولنا. نكتب المحور لأن العدد نفسه قد يشير إلى صف كامل أو عمود كامل. ليس حذف العمود تغييرًا لقيمة كل عنصر فيه إلى الصفر؛ نحن نزيل مواضع ذلك العمود من تنظيم الناتج.

نختار قائمة مواضع الحذف [0,2] على axis=1. نحذف العمود الأول والثالث، ونترك الأوسط. الصف الأول يحتوي الآن على −1 وحدها، والثاني على 9 وحدها. الشكل (2,1)، وعدد القيم صار 2 بدلًا من 6.

بقي ترتيب الصفين كما اخترناه، لكن عدد الأعمدة انخفض من 3 إلى 1. لا نضع أصفارًا محل 4 و7 و2 و6؛ تلك الأعداد لا تظهر في هذا الناتج. لذلك لا يعادل الناتج جدولًا من صفين وثلاثة أعمدة فيه عمودان صفريان.

ولتغيير المحور، نحذف الصف ذي الفهرس 1 على axis=0. يبقى الصف الأول [4,-1,7]، بشكله (1,3). القيمتان −1 و9 لا تشكلان نتيجة هذا الاختيار؛ اخترنا صفًا، بينما المثال السابق اختار أعمدة.

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

ميّز حذف القيم المسطحة

الافتراضي axis=None يحذف من المدخل المسطح ويعيد خرجًا مسطحًا. [1]

نقرأ A صفًا بعد صف، فنحصل على [4,-1,7,2,9,6]. ست قيم على محور واحد. موضعاها 0 و2 يحملان 4 و7، ولهذا حذفهُما يترك [-1,2,9,6].

الشكل هنا (4,)، وعدد المحاور واحد. الرقم 2 الباقي جاء من الصف الثاني الأصلي، ولم نحذفه لمجرد أن 4 فوقه كان في العمود الأول. قائمة مواضع السطر المسطح تختار قيمًا منفردة، أما قائمة مواضع الأعمدة فتختار أعمدة عبر الصفين.

في حذف الأعمدة السابق، كان العمود الأول يضم 4 و2، والثالث يضم 7 و6؛ أزيلت القيم الأربع. في الحذف المسطح أزلنا 4 و7 وحدهما. لذلك بقيت 2 و6 في الناتج المسطح، بينما لم تبقيا في نتيجة حذف العمودين.

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

لا نقرر المحور من شكل الشاشة. قد يعرض المحرر القيم في سطر أو عدة أسطر؛ وصف التنظيم هو الذي يحدد هل الموضع المختار عنصر مسطح أم شريحة من محور الأعمدة.

اقرأ معنى القناع قبل استعماله

في التوثيق الحالي، True في قناع delete المنطقي يشير إلى الإزالة. [1] وفي compress يشير إلى الاختيار. [2]

نؤلف قناعًا للأعمدة [True,False,True]، بثلاث قيم توافق أعمدة A الثلاثة. نسميه هنا قناع الحذف حين نستعمله مع delete. أول عمود وثالث عمود معلّمان بـTrue، فيخرجان؛ ويبقى الأوسط المؤشر بـFalse.

الناتج هو العمود ذو القيمتين −1 ثم 9، بشكل (2,1). يطابق حذف الفهرسين [0,2] من القسم الأول. نحن نقارن فهارس معلنة وقناعًا منطقيًا معلنًا، ولا نستبدل القناع بقائمة أعداد 1 و0 و1 ونفترض أنها النوع نفسه.

إذا مررنا القناع نفسه إلى compress على axis=1، فإنه يختار العمودين المعلّمين بـTrue. الصف الأول يصبح [4,7]، والثاني [2,6]. الشكل (2,2). العمود الأوسط لا يظهر هنا، وهو الوحيد الذي بقي في نتيجة delete بالقناع نفسه.

لإبقاء ما لم نحذفه، نكمل القناع: [False,True,False]. مع compress، يختار هذا القناع العمود الأوسط. نحصل على −1 في الصف الأول و9 في الثاني. يطابق ذلك delete بالقناع الأول، لأن مواضع الإبقاء هي مكمل مواضع الحذف.

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

الفهرسان 0 و2 يحذفان العمودين الخارجيين عند axis يساوي 1، فيبقى العمود سالب 1 و9. عند axis None يحذفان 4 و7 من السطر المسطح، فتبقى سالب 1 و2 و9 و6.
مواضع الأعمدة تختلف عن مواضع المدخل المسطح.

احفظ أصل العمود الباقي

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

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

نشتق عدد الأعمدة الباقية من قناع الحذف المطابق: طول المحور ناقص عدد قيم True. في مثالنا 3−2=1. أما قناع الإبقاء نفسه مع compress فيعطي عددًا يساوي عدد True، أي 2. هذان العددان يتوافقان مع الشكلين (2,1) و(2,2).

إذا كانت قيم قناع الحذف كلها True، فلا يبقى أي عمود: صفان وكل صف بلا عناصر، بشكل (2,0). وإذا كانت كلها False، يبقى A نفسه في نموذج قيمنا. مع compress ينعكس الاختيار: True كلها تختار الأعمدة الثلاثة، وFalse كلها لا تختار عمودًا.

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

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

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

الاختيارالشكلالقيم الباقية
delete: [0,2]، axis=1(2,1)الصف الأول −1؛ الثاني 9
delete: [0,2]، axis=None(4,)−1، 2، 9، 6
delete: [True,False,True]، axis=1(2,1)الصف الأول −1؛ الثاني 9
compress: [True,False,True]، axis=1(2,2)الصف الأول 4 و7؛ الثاني 2 و6
compress: [False,True,False]، axis=1(2,1)الصف الأول −1؛ الثاني 9

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

المراجع

  1. NumPy — delete
  2. NumPy — compress

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