قبل extract القناع المختلف في الشكل؛ ورفضته الفهرسة المباشرة في مثالنا.
افصل العدد عن الشكل
تصف extract العمل على الشرط والمدخل بعد تسطيحهما، وتعيد قيمًا في محور واحد. [1] عند الفهرسة المنطقية متساوية عدد المحاور، يجب توافق الأبعاد المقابلة. [2]
نسأل عن شرط له ست إجابات، لكن ترتيبها على الورقة مختلف عن ترتيب جدول البيانات. عدد الخانات يجيب عن مقدار ما كتبناه؛ أما الشكل فيبين توزيع هذه الخانات على الصفوف والأعمدة. نحتفظ بالوصفين قبل الاختيار.
لا نختار قناعًا من ملف حقيقي ولا نثبت صلاحية بيانات تدريب. ننشئ جدولًا تعليميًا وقناعًا مستقلًا، ثم نشغّل واجهتين مختلفتين لنرى ما قبلتاه. معنى كل True هنا قرار إبقاء خانة من جدولنا المعلن.
نبدأ ترقيم المواضع من صفر. للمدخل صفان وثلاثة أعمدة؛ وللقناع الأول ثلاثة صفوف وعمودان. حاصل ضرب العددين ستة في الحالتين، لكن البعد الأول ليس متساويًا، وكذلك البعد الثاني.
لذلك نكتب اسم العملية مع النتيجة. العبارة «قبلت المكتبة القناع» لا تحدد هل استعملنا extract أو الأقواس المباشرة. مثالنا نفسه يحتوي نجاحًا في الأولى واستثناءً في الثانية.
اقرأ المثال والاستثناء
أنشأنا A=np.array([[9,0,6],[4,-3,8]],dtype=np.int64)، وM=np.array([[True,False],[False,True],[True,False]],dtype=np.bool_). الأعداد بلا وحدات ولا تمثل مشاهدات فعلية.
أعادت np.extract(M,A) في NumPy 2.3.5 على CPython 3.12.14 القيم [9,4,-3]، بالشكل (3,) والنوع int64. نسجل الشكل مع القيم لأن النتيجة ليست جدولًا من صفين وثلاثة أعمدة، ولا قناعًا من ثلاثة صفوف وعمودين.
ورقة مرجعنا تقرأ أعداد A صفًا فصفًا: [9,0,6,4,-3,8]. وتقرأ إجابات M بالترتيب نفسه داخل صفوفه: [True,False,False,True,True,False]. نقارن الموضع الأول بالأول حتى السادس بالسادس.
نحتفظ بـ9 عند الفهرس المسطح 0، و4 عند 3، و−3 عند 4. إحداثياتها في A هي (0,0) و(1,0) و(1,1). قيمة 6 لم تدخل الناتج لأن جواب موضعها المسطح 2 هو False.
ثم نفذنا A[M] دون تغيير أي مدخل، فارتفع IndexError. لم نحول الاستثناء إلى قائمة خالية أو نفترض أن False أسقطت جميع القيم. هذه المحاولة لم تعط قائمة مختارة أصلًا.
تمنع الفهرسة اختلاف الأبعاد، حتى مع False. [2] وفي شبكة اختبارنا، رفضت الأقواس القناع المختلف عند جميع القرارات False أيضًا، بينما أعادت extract نتيجة خالية بالشكل (0,).
نحصر المقارنة هنا في مدخل وقناع لهما محوران. لا نعممها على قناع أحادي يختار صفوفًا من جدول، أو على مزج فهارس صحيحة ومنطقية. هذه استعمالات لم ينفذها فحصنا.
احفظ ترتيب القرارات
نؤلف قناعًا ثانيًا Q=[[True,False,False],[True,True,False]] من bool بالشكل (2,3). قائمة قراراته عند القراءة صفًا فصفًا هي قائمة M الأصلية نفسها. أنشأناه صراحة من ست إجابات، ولم ننسب إنشاءه إلى استدعاء reshape في تجربتنا.
أعادت np.extract(Q,A) وA[Q] القيم [9,4,-3] بالشكل (3,) والنوع int64. الآن القرار الأول في الصف الثاني يقابل 4، والثاني فيه يقابل −3. نجحت الفهرسة المباشرة مع توافق شكل القناع والمدخل.
ننشئ تحكمًا آخر بترتيب منقول M: R=[[True,False,True],[False,True,False]]. شكل R أيضًا (2,3)، لكن قراءته المسطحة [True,False,True,False,True,False]؛ تغير موضعا القرارين الخاصين بـ6 و4.
أعادت np.extract(R,A) وA[R] القيم [9,6,-3] بالشكل (3,) والنوع int64. لم نشغل M.T لبناء التحكم؛ كتبنا ترتيبه من قوائم Python. لذلك نفرق بين وصف ترتيب المنقول وبين الادعاء بأننا اختبرنا واجهته هنا.
Q وR فيهما ثلاث True وفيهما ست خانات ولهما الشكل نفسه. مع ذلك، اختارا قائمتين مختلفتين من جدولنا، لأن قرار إبقاء الفهرس المسطح 3 في Q صار قرار إبقاء الفهرس 2 في R.
لا نستدل بعدد المختار وحده على تطابق هويته. كلا الناتجين من ثلاثة أعداد، لكن 4 تنتمي إلى أحدهما و6 إلى الآخر. نراجع موضع كل جواب عند نقل قناع أو إعادة ترتيب وصفه.
توافق الشكل يحل مشكلة محاولة الأقواس في مثالنا، لكنه لا يثبت أن Q هو القناع الصحيح لأي مهمة خارج المثال. صحة الربط بالبيانات تحتاج إلى معرفة كيف أُنشئت الإجابات وما الجدول الذي تخصه.

راجع مرجع الفحص وحدوده
بنى المرجع توقعاته بقوائم Python مستقلة: مر على صفوف البيانات وجمع أعدادها، ثم قرن الأعداد بالإجابات الست واختار ما يقابله True. لم يستخدم extract أو ravel أو reshape أو فهرسة NumPy المنطقية لبناء القيمة المتوقعة.
لاستخراج إحداثيات خانة من A، قسم المرجع رقمها المسطح على ثلاثة بقسمة صحيحة، واستعمل الباقي لرقم العمود. الفهرس 4 يعطي الصف 1 والعمود 1. هذه عملية صحيحة في شبكة صفوفنا ذات الأعمدة الثلاثة المعلنة.
اختبرنا جميع المدخلات (2,3) من العددين −2 و5، وعددها 2⁶=64. ولكل مدخل جرّبنا جميع أقنعة القرارات الست، وعددها 2⁶=64 أيضًا. بلغ عدد الأزواج 64×64=4096.
راجعنا ثمانية أمور لكل زوج: قيم extract؛ ونوعها وشكلها؛ ونتيجة الأقواس بالقناع المتوافق؛ وextract بالقناع المتوافق؛ واستثناء الأقواس بالقناع المختلف؛ وتحكم ترتيب المنقول بالطريقتين؛ وعدد المختار وإحداثياته؛ وثبات بايتات المدخلين وشكليهما.
أضفنا ثمانية فحوص مماثلة للمثال الرئيسي وأربعة خاصة بقائمتيه ونوعه وشكله المعلنة. الحساب 4096×8+8+4=32780، ومرت جميع الفحوص. أنماط الشبكة تشمل القناع الكامل True والقناع الكامل False.
اقتصر التنفيذ على int64 وbool ومدخل من صفين وثلاثة أعمدة وأقنعة من الأشكال المعلنة. لم نفحص شروطًا أقصر أو أطول أو قيمًا غير منطقية في الشرط أو محاور أقل في الفهرسة أو أبعادًا وأنواعًا أخرى أو NaN أو ملكية الذاكرة أو الأداء.
قبل نقل هذه الفكرة إلى برنامجك، سجل شكل البيانات وشكل الشرط واسم واجهة الاختيار وترتيب القرارات. النتيجة الناجحة دليل على ما فعلته المحاولة المحددة؛ ليست دليلًا على أن كل طريقة اختيار تقبل القناع نفسه.
| القناع | العملية | الناتج |
|---|---|---|
| M / (3,2) | extract(M,A) | [9,4,-3] |
| M / (3,2) | A[M] | IndexError |
| Q / (2,3) | extract(Q,A) / A[Q] | [9,4,-3] |
| R / (2,3) | extract(R,A) / A[R] | [9,6,-3] |
للتوسع: أبعاد المصفوفة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
