أعادت flatnonzero في عرضنا ذي الأعمدة المعكوسة الأرقام[0,2,5,7]. الرقم0 يحدد موضع قيمة−172، ولا يقول إنها صفر. سنربط الفهرس المسطح بإحداثيات المدخل الذي فحصناه.
ميز قيمة الخانة من رقم موضعها
تعيد flatnonzero فهارس العناصر غير الصفرية في التمثيل المسطح للمدخل. [1]
نؤلف جدولًا صحيحًا من صفين وأربعة أعمدة. أعداده بلا وحدة؛ لسنا أمام قراءات ناقصة أو بيانات ينبغي تنظيفها. نبحث عن مواضع القيم التي تختلف عن الصفر، ثم نقرأ أرقام المواقع كما عادت من النداء.
الفهرس0 اسم للموضع الأول عندما يبدأ الترقيم من صفر. وجوده في الناتج لا يصف القيمة في ذلك الموضع بأنها صفرية. سنربط كل رقم مسطح بصف وعمود في المدخل المحدد قبل تفسيره.
عندما نعكس ترتيب الأعمدة، نحتاج قراءة قيم العرض الجديد. الأرقام التي تخص الجدول الأصلي لا تنقل تلقائيًا إلى الجدول المعكوس، ولو بقي الشكل وعدد القيم غير الصفرية متساويين.
اقرأ الجدول الأصلي والأعمدة المعكوسة
شغّلنا NumPy2.3.5 على CPython3.12.14. أنشأنا a=np.array([[0,171,0,-172],[173,0,-174,0]],dtype="<i8"). الشكل(2,4)، ونرقم الصفوف والأعمدة من صفر.
أعادت np.flatnonzero(a) المصفوفة [1,3,4,6] من int64 بالشكل(4,). في قراءة صفية للجدول، القيم الموافقة هي171 ثم−172 ثم173 ثم−174. هذه القيم قرأناها من المرجع المعلن؛ لم نستعمل نداء استخراج آخر لإنتاجها.
ثم أنشأنا b=a[:,::-1]. عكسنا ترتيب الأعمدة داخل كل صف. صارت القيم [[−172,0,171,0],[0,−174,0,173]]، وبقي الشكل(2,4) والنوع int64.
أعادت np.flatnonzero(b) الأرقام [0,2,5,7] من int64 بالشكل(4,). الرقم الأول0 يخص قيمة−172 في الصف الأول والعمود الأول من b؛ هذه قيمة غير صفرية.
في الجدول المعكوس، الرقم2 يخص171، والرقم5 يخص−174، والرقم7 يخص173. تغير ترتيب القيم المختارة مع عكس الأعمدة، ولم يصبح الناتج قائمة تلك القيم نفسها.
سجلنا strides للأصل(32,8) وللعرض(32,−8) بالبايت. نقصر وصفنا على هذا البناء الفعلي؛ لم نحسب عناوين ذاكرة أو زمنًا أو حجم ملف، ولم نكتب عبر العرض.
اربط الإحداثيات بالفهرس المسطح
تعيد nonzero مجموعة مصفوفات بحسب المحاور بترتيب C. [2] استعملناها على b للمقارنة مع الفهارس المسطحة.
أعادت np.nonzero(b) زوج مصفوفات int64: أرقام الصفوف [0,0,1,1] وأرقام الأعمدة [0,2,1,3]. كل مكوّن شكله(4,)، ويقترن الصف الأول بالعمود الأول في السجل، ثم الثاني بالثاني.
إذن المواضع هي(0,0)،(0,2)،(1,1)،(1,3). في جدولنا ذي أربعة أعمدة نحسب الفهرس المسطح الصفّي من r*4+c. يعطي ذلك0 و2 و5 و7، وهي الأرقام التي عادت من flatnonzero على b.
الافتراضي في ravel هو ترتيب فهارس C، حيث يتغير فهرس المحور الأخير أسرع. [3] نستعمل هذا المعنى للقراءة الصفية؛ لم نشغل ravel في فحصنا.
عدد المطابقات أربعة في الأصل وفي العرض المعكوس، لكن قائمتي الفهارس تختلفان. ثبات العدد والشكل لا يحدد أين تقع المطابقات داخل كل مدخل. لا نستعمل الأرقام[1,3,4,6] لقراءة b بوصفها مواضع غير الصفر فيه.
للتحكم أنشأنا جدولًا صفريًا مستقلًا من int64 بالشكل(2,4). أعادت flatnonzero مصفوفة int64 خالية بالشكل(0,). يختلف هذا الناتج الخالي عن ظهور الرقم0 ضمن قائمة غير خالية.

راجع السجل وحدوده
اخترنا n من171 إلى187، أي17 قيمة. لكل n بنينا الأصل [[0,n,0,−n−1],[n+2,0,−n−3,0]]، ثم أنشأنا عرض الأعمدة المعكوسة. أضفنا التحكم الصفري مرة واحدة.
لكل أصل ثلاثة نداءات مستهدفة: flatnonzero على الأصل، ثم على العرض، ثم nonzero على العرض. المجموع17×3+1=52 نداءً مع التحكم؛ نجحت كلها. أنشأنا أيضًا17 عرضًا بواسطة التقطيع، ونسجل هذا البناء منفصلًا عن عد النداءات المستهدفة.
لدينا35 عودة مباشرة لمصفوفة:34 غير خالية بأربعة عناصر، وعودة التحكم الخالية. عدد عناصرها34×4=136. ولدينا17 عودة زوجية، في كل منها مصفوفتان بأربعة عناصر؛ مجموع مكونات الإحداثيات17×2×4=136.
الإجمالي136+136=272 قيمة فهرس عددية أصلية مسجلة. ليست272 قيمة متميزة، ولا نسمي المصفوفات داخل العودة الزوجية نداءات إضافية. لا توجد عودات منطقية أو أخطاء أو أعداد مفردة في سجلنا.
بنى مرجع Python قوائم الصفوف وعكس كل صف قبل استيراد NumPy، ثم مسح المواضع بالترتيب الصفّي. حسب r*4+c لكل قيمة مختلفة عن صفر، وبنى مكونات الإحداثيات من الأزواج نفسها دون دوال الفحص المستهدفة.
تحقق struct من بايتات الأعداد الصحيحة في القراءة المنطقية الصفية. طابقت العودات المرجع، وبقيت قيم الأصل والعرض وأنواعهما وأشكالهما وخطواتهما ثابتة. يوجد35 تمثيلًا مختلفًا بايتيًا بهذه القراءة، تشمل التحكم الصفري؛ لا نصفها بأنها35 مخزنًا مستقلًا.
النطاق int64 والشكل(2,4) والتقطيع المذكور والتحكم الصفري. لم نفحص مدخلًا مفردًا أو بلا محاور أو بأطوال صفرية أوNaN أو نصوصًا أو كائنات أو فئات مشتقة أو ترتيب F أوK أو الكتابة أو مشاركة الذاكرة أو التخصيص أو الأداء أو إصدارًا آخر.
| Own input | flatnonzero | shape |
|---|---|---|
| Base | 1 / 3 / 4 / 6 | (4,) |
| Reversed columns | 0 / 2 / 5 / 7 | (4,) |
| Zero control | empty | (0,) |
للتوسع: عد غير الصفر.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
