diag يبني من مدخل أحادي البعد، ويستخرج قطرًا من مدخل ثنائي الأبعاد. [1] نبدأ بفحص المدخل.
افحص عدد أبعاد المدخل
للمدخل الأحادي، diag يبني مصفوفة ثنائية؛ وللمدخل الثنائي يستخرج القطر. [1]
نعلن v=[3,-5,8] متجهًا أحادي البعد من ثلاثة أعداد بلا وحدة. وعند البناء بالإزاحة k=1، نضع 3 في الموضع (0,1)، و−5 في (1,2)، و8 في (2,3). أرقام الصف والعمود تبدأ من صفر، وتظهر الأعداد من اليسار إلى اليمين.
نملأ بقية مواضع جدول البناء بأصفار، فتكون صفوفه [[0,3,0,0],[0,0,-5,0],[0,0,0,8],[0,0,0,0]]. له أربعة صفوف وأربعة أعمدة. الصفر في الصف الأخير ليس قيمة رابعة أضفناها إلى v؛ إنه من إكمال الجدول حول القطر المزاح.
ثم نعلن جدولًا مختلفًا A=[[3,-5,8,2],[7,4,0,9],[-6,1,5,11]]. له ثلاثة صفوف وأربعة أعمدة، أي بعدان. عند استخراج القطر المزاح بمقدار 1 نأخذ المواضع (0,1) و(1,2) و(2,3)، فنقرأ −5 ثم 0 ثم 11.
إذن المدخلان لا يقدمان القائمة نفسها ولا يطلبان العمل نفسه: الأول قائمة نضعها في جدول، والثاني جدول نختار منه قائمة. وجود الأقواس في العرض وحده لا يكفي؛ نعلن هل يحتوي المدخل على محور واحد أم صفوف وأعمدة.
حدد القطر وطول القائمة
k=0 للقطر الرئيسي؛ الموجب فوقه والسالب تحته. [1]
نسير في قطر جدولنا بزيادة رقم الصف ورقم العمود معًا بمقدار 1. نبدأ عند (0,0) للإزاحة صفر، فنأخذ 3 و4 و5. ينتهي السير حين ينتهي أحد المحورين؛ العمود الأخير لا يضيف قيمة بعد غياب صف رابع.
للإزاحة 1 نبدأ عند (0,1)، فتكون القائمة [-5,0,11]. وللإزاحة −1 نبدأ عند (1,0)، فنأخذ 7 من هذا الموضع ثم 1 من (2,1). لا نعكس ترتيب القراءة لمجرد كون الإزاحة سالبة.
وعند k=2 نقرأ (0,2) ثم (1,3)، أي [8,9]. عند k=3 يوجد الموضع (0,3) وحده وقيمته 2. وعند k=4 لا يوجد عمود رقمه 4 في A، فيكون القطر بلا مواضع في هذا النموذج.
عدد قيم القائمة يساوي عدد المواضع على المسار، بما فيها الأصفار الأصلية. لذلك تحتوي قائمة الإزاحة 1 على ثلاث قيم رغم أن اثنتين فقط غير صفريتين. نراجع بداية المسار وحدود الجدول قبل كتابة طول القطر.
لا تجعل البناء عكسًا للاستخراج
نأخذ القائمة [-5,0,11] التي استخرجناها من A، ونستعملها لبناء قطر بالإزاحة 1. نضع −5 عند (0,1)، والصفر عند (1,2)، و11 عند (2,3). يصبح الجدول [[0,-5,0,0],[0,0,0,0],[0,0,0,11],[0,0,0,0]].
هذا الجدول من أربعة صفوف وأربعة أعمدة، بينما A ثلاثة صفوف وأربعة أعمدة. كما اختفت قيم A خارج القطر المختار: 7 و4 و9 وغيرها. القائمة لم تحتفظ بمواقعها وقيمها، فلا يمكن للبناء وحده استرجاعها.
بل يمكن لجدولين مختلفين أن يعطيا القائمة المستخرجة نفسها. إذا غيرنا 7 في A إلى 70، وتركنا −5 و0 و11 في مواضع قطر الإزاحة 1، فإن القائمة تبقى [-5,0,11]. لم يعد لدينا في هذه القائمة ما يكشف أي الجدولين بدأنا به.
وفي البناء من v ذي القيم 3 و−5 و8، تعطي الإزاحة −1 صفوفًا [[0,0,0,0],[3,0,0,0],[0,-5,0,0],[0,0,8,0]]. تتغير جهة مواضع القيم، لكن طول ضلع جدول البناء ما زال 4 في هذا المثال.
هذا اختلاف في كمية المعلومات المحفوظة، وليس خطأ في الدالة. إذا أردنا استعادة A كاملة، نحتفظ بها أو بمعلومات كافية عن كل مواضعها؛ استخراج قطر واحد ليس حفظًا لكل عناصرها.

ميز diagflat من اختيار القطر
diagflat يبني مصفوفة ثنائية من قيم المدخل بعد تسطيحه. [2]
نؤلف Q=[[3,-5],[8,2]]. عند استخراج قطره الرئيسي نأخذ 3 و2 فقط. أما تسطيحه في مثالنا فيقرأ الصف الأول ثم الثاني، فتكون القائمة 3 ثم −5 ثم 8 ثم 2؛ جميع قيم Q موجودة فيها.
نبني من هذه القائمة القطر الرئيسي: [[3,0,0,0],[0,-5,0,0],[0,0,8,0],[0,0,0,2]]. النتيجة 4×4، وليست القائمة [3,2]. لهذا فإن استبدال اسم diag باسم diagflat يغير المهمة مع هذا المدخل الثنائي.
لا نخلط عدد المواضع الجديدة بعدد القيم المنقولة: جدول البناء له 16 موضعًا، منها أربعة استقبلت قيم Q، والباقي أصفار إكمال. ولم نجرِ ضرب مصفوفات أو نجمع قيم القطر في عدد واحد.
نقصر الأمثلة على قوائم غير فارغة من أعداد صحيحة ذات بعد واحد، وجداول مستطيلة من أعداد صحيحة ذات بعدين. تحققنا من استخراج المواضع وحساب الطول والبناء مستقلًا. لم نشغل NumPy أو نختبر مدخلًا بثلاثة أبعاد أو نسخًا أو تعديلًا عبر الناتج أو ذاكرة أو زمنًا.
| الإزاحة في A | القيم المستخرجة | عددها |
|---|---|---|
| 0 | 3، 4، 5 | 3 |
| 1 | −5، 0، 11 | 3 |
| −1 | 7، 1 | 2 |
| 2 | 8، 9 | 2 |
| 3 | 2 | 1 |
| 4 | بلا مواضع | 0 |
للتوسع: الأبعاد والقطر والمنقول.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
