من مدخل int64 فارغ بالشكل (0,3)، أعادت diagflat مع k=2 مصفوفة (2,2) ذات أربعة أصفار. مع k=0 رجع الشكل (0,0) بلا عناصر. سنميز عدد العناصر من عدد القيم غير الصفرية.
فارغ أم كله أصفار؟
تبني diagflat مصفوفة ثنائية الأبعاد من المدخل المسطح على القطر المحدد بالإزاحة k. [1]
تمثل shape أطوال محاور المصفوفة، وتمثل size عدد عناصرها، وهو حاصل ضرب تلك الأطوال. [2] [3] نسجل الخاصيتين مع القيم بدل استبدال إحداهما بوصف عام عن الأصفار.
مدخلنا (0,3) فيه صفر صفوف؛ لذلك لا يحمل ثلاثة أصفار أو ثلاثة أعداد مجهولة. حاصل ضرب الطولين صفر، ولا يوجد عنصر على محور الصفوف يمكن نقله من المصدر.
أما [[0,0],[0,0]] فهو جدول له صفان وعمودان وأربعة عناصر. كل عدد فيه صفر، لكن مواضعه موجودة. لا نساوي غياب العنصر بوجود عنصر قيمته صفر لمجرد أن العرضين لا يحتويان عددًا غير صفري.
الأعداد والإزاحات مؤلفة بلا وحدة قياس. لا نعامل الأصفار الناتجة كقياسات استعدناها أو بيانات مفقودة عوضناها؛ نقرأ بناء مصفوفة في تشغيل محدد فقط.
الإزاحة تغير حجم الناتج
في NumPy 2.3.5 وCPython 3.12.14 أنشأنا e=np.array([],dtype=np.int64).reshape(0,3). قرأنا الشكل (0,3)، وعدد العناصر0، والبايتات فارغة. لم ننشئ صفًا من ثلاث قيم ثم نحذف محتواه في الخفاء.
أعادت np.diagflat(e,k=0) مصفوفة int64 بالشكل (0,0) وعدد عناصر0. قائمة قيمها عند الحفظ []، لكننا نحفظ الشكل أيضًا كي لا نخلطها بمدخل أحادي المحور من طول صفر.
الإزاحة الموجبة تختار قطرًا فوق الرئيسي، والسالبة تحته. [1] استدعينا np.diagflat(e,k=2)، فكانت القيم [[0,0],[0,0]] والشكل (2,2) والنوع int64 وعدد العناصر4.
ثم استدعينا np.diagflat(e,k=-2). كانت القيم والشكل والنوع وعدد العناصر نفسها في هذا المثال الفارغ. لا توجد قيم مصدر تتحرك من قطر علوي إلى سفلي؛ نرصد حجم البناء وما يحتويه فعلًا.
الصفر المكتوب في كل موضع من الناتج ليس عنصرًا جاء من e. عدد عناصر المصدر صفر في المحاولات الثلاث؛ وجود أربعة أصفار في النتيجة لا يزيد عدد قيم المصدر المنقولة إلى أربع.
حفظنا بايتات e وشكلها ونوعها قبل النداءات وبعدها؛ بقيت ثابتة. نتحدث عن حجم النتيجة، ولا نقيس استهلاك الذاكرة الكلي أو حجم ملف أو عدد تخصيصات داخل التنفيذ.
أشكال فارغة وتحكم بقيم
أنشأنا فارغة أحادية بالشكل (0,)، وفارغة ثنائية بالشكل (2,0)، بالنوع int64. كل منهما يحتوي صفر عنصر وصفر بايت؛ تختلف أطوال المحاور التي نحفظها مع المدخل.
مع k=0 أعطى كل مدخل الشكل (0,0) بلا عناصر. ومع k=2 أوk=−2 أعطى كل منهما مصفوفة (2,2) من أربعة أصفار. لم يحتفظ البناء بالشكل الأصلي لمجرد أن كل مصدر فارغ.
للتحكم غير الفارغ أنشأنا v=np.array([151,-155,0],dtype=np.int64)، بالشكل (3,). أعادت np.diagflat(v,k=2) مصفوفة (5,5) من النوع نفسه، وعدد عناصرها25.
قرأنا151 في الموضع (0,2)، و−155 في (1,3)، وصفر المدخل في (2,4)، وبقية المواضع أصفار. الفهارس تبدأ من صفر، ونقرأ الصف قبل العمود؛ نحفظ موضع قيمة المصدر حتى عندما تساوي صفرًا.
إذن هذا التحكم ينقل ثلاث قيم معلنة إلى ثلاثة مواضع، لكنه يحتوي عنصرين غير صفريين فقط. عدد عناصر الناتج25، وعدد قيم المصدر3، وعدد غير الأصفار2؛ ثلاثة أعداد تجيب عن ثلاثة أسئلة.
الرسم الثاني يعرض المواضع الثلاثة صراحةً بدل تلوين غير الأصفار وحدها. الصفر عند (2,4) يطابق قيمة المصدر الثالثة، مع أنه لا يتميز عدديًا عن أصفار الإكمال في المواضع الأخرى.

عد النتائج وحدود الفحص
استخدمنا المدخلات الفارغة الثلاثة نفسها لكل مقدار m من1 إلى17. لكل مدخل شغّلنا k=0 وk=m وk=−m. العدد3×17×3=153 نداءً؛ تكررت حالة الإزاحة صفر في كل مجموعة مقدار بصورة معلنة.
نتيجة الإزاحة صفر لها الشكل (0,0) في51 سجلًا. أما الإزاحتان غير الصفريتين فلهما الشكل (m,m)، فنحفظ102 سجلًا غير فارغ كله أصفار. ليست هذه154 مصفوفة ذات قيم أو أشكال متميزة.
مجموع العناصر في مخارج المدخلات الفارغة هو6×(1²+2²+…+17²)=6×1785=10710. نضيف نداء التحكم الواحد ذا25 عنصرًا:154 نداءً و154 عودة ناجحة و10735 عنصرًا عدديًا محفوظًا، دون سجلات خطأ.
لدينا أربعة تمثيلات مدخل متميزة بالشكل والنوع والبايتات، لكن بصمتين بايتيتين فقط: الفارغات الثلاث تشترك في صفر بايت، والتحكم يحمل الأعداد الثلاثة. لا نستنتج تساوي الشكل من تساوي بصمة فارغة.
بنى مرجع Python قوائم مربعة أصفارًا بطول ضلع يساوي مقدار الإزاحة للمدخل الفارغ. وللتحكم بنى خمسة صفوف، ثم وضع كل قيمة عند (j,j+2). حدد المتوقع قبل استيراد NumPy، ولم يستدعِ diagflat أوdiag أودالة أصفار لتوليده.
وافق كل عنصر مسجل المرجع، وراجعنا المدخل ببايتات struct وثبات الشكل والنوع والبايتات بعد النداءات. فحوص الخصائص وإعداد المصفوفة ليست نداءات إضافية ضمن عدد154 المسجل للعملية المسماة.
النطاق int64 وهذه الأشكال الفارغة والإزاحات والتحكم. لم نفحص مدخلًا مركبًا أوعائمًا أوNaN أوobject أوفئات مشتقة أوثلاثة محاور أونسخًا أوهوية أوكتابة أومشاركة ذاكرة أوأداءً أوإصدارًا آخر.
| Own input shape | Offset k | Output shape / size |
|---|---|---|
| (0,3) | 0 | (0,0) / 0 |
| (0,3) | +2 | (2,2) / 4 |
| (0,3) | -2 | (2,2) / 4 |
| (3,) own control | +2 | (5,5) / 25 |
للتوسع: الأبعاد والقطر.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
