اختلف الفاصل الداخلي بين جزأي مثالنا، ونجح تجميع الكتل.
اقرأ القائمتين من الداخل
block تصل القوائم الداخلية على المحور الأخير أولًا؛ ولا تفرض شبكة فواصل ثابتة. [1]
نحصر السؤال في أربع مصفوفات ثنائية الأبعاد، داخل قائمتين: [[A,B],[C,D]]. في هذا التنظيم، نسأل عن الحد بين A وB، والحد بين C وD؛ هل يجب أن يقع الحدّان فوق بعضهما في الناتج؟
الرسم المستطيل للأرقام قد يوحي بأن كل خط في الجزء العلوي يجب أن يستمر إلى الأسفل. سنختبر هذا الافتراض باستعمال عرضين مختلفين للكتلتين اليسريين، مع بقاء العرض الكلي واحدًا.
الأعداد مؤلفة ولا تمثل بيانات قياس. لم نجمع الخانات حسابيًا أو نجعل كل كتلة قيمة واحدة؛ نتتبع موضع كل رقم بعد تجميع المصفوفة.
فاصلان مختلفان في ناتج واحد
شغّلنا NumPy 2.3.5 على CPython 3.12.14. جميع الكتل التالية من int64: A=[[5,-1],[2,7]] بالشكل (2,2)، وB=[[8,4,-3],[6,0,9]] بالشكل (2,3).
C=[[-4]] بالشكل (1,1)، وD=[[10,11,-2,3]] بالشكل (1,4). يضم الجزء العلوي صفين وعرضه 2+3=5؛ ويضم الجزء السفلي صفًا واحدًا وعرضه 1+4=5.
استدعينا Y=np.block([[A,B],[C,D]]). كانت Y تساوي [[5,-1,8,4,-3],[2,7,6,0,9],[-4,10,11,-2,3]]، ونوعها int64 وشكلها (3,5).
في الصفين الأولين، أول عمودين من A والثلاثة التالية من B. في الصف الأخير، أول عمود من C والأربعة التالية من D. لم نطلب أن يكون عرض A مساويًا لعرض C؛ اختلف الفاصل الداخلي بين الجزأين.
يمكنك مراجعة الصف الأول: 5 ثم -1 ثم 8 ثم 4 ثم -3. والصف الأخير: -4 ثم 10 ثم 11 ثم -2 ثم 3. العدد 10 يقع في العمود الثاني من الناتج، لكنه من D، بينما العدد -1 فوقه من A.
هذا اختلاف في مصدر الخانة، وليس انزياحًا خفيًا في ترقيم الأعمدة. الألوان في الرسم تتابع الكتل الأصلية؛ لا نفترض أن اللون نفسه يجب أن يشغل شريطًا رأسيًا كاملًا.
راجع العرض والارتفاع عند كل وصل
تطابق الأشكال مطلوب خارج محور الوصل. [2]
نفذنا T=np.concatenate((A,B),axis=1) فأعطت الصفين [[5,-1,8,4,-3],[2,7,6,0,9]] بالشكل (2,5). ثم U=np.concatenate((C,D),axis=1) فأعطت [[-4,10,11,-2,3]] بالشكل (1,5).
نفذنا Z=np.concatenate((T,U),axis=0). تطابقت قيم Z ونوعها وشكلها مع Y. هذا تحكم تنفيذي ثانٍ، وليس المرجع المستقل الذي سنصفه لاحقًا؛ المساران يستعملان المكتبة نفسها.
داخل الجزء العلوي تساوى عدد الصفوف في A وB؛ وداخل السفلي تساوى عدد الصفوف في C وD. عند وصل الجزأين رأسيًا، تساوى عدد الأعمدة في T وU. لا نبدل هذه المقارنات بمقارنة عرض A وعرض C.
لتحكم العرض، أنشأنا كتلة أصفار بدل D بالشكل (1,5)، فصار عرض الجزء السفلي 1+5=6 مقابل خمسة فوقه؛ أعطى الاستدعاء ValueError. لم نضف عمودًا إلى الجزء العلوي كي نخفي عدم التطابق.
لتحكم الارتفاع، أنشأنا أصفارًا بدل B بالشكل (3,3)، مع بقاء A بالشكل (2,2). أعطى الاستدعاء ValueError أيضًا. هنا يقع الاختلاف داخل القائمة العلوية قبل اكتمال جزأي العرض.
لا تطبق block البث المعتاد على الكتل. [1] وضعنا العدد المفرد np.int64(9) مكان B في المثال، ولم يتمدد إلى صفين؛ أعطى هذا التحكم ValueError. هذه نتيجة الاستدعاء المحدد، لا قاعدة تمنع كل استعمال للأعداد المفردة.
حفظنا أشكال A وB وC وD وبايتاتها قبل فحوصها وبعدها؛ لم تتغير. لم نفحص مشاركة الذاكرة أو أثر الكتابة في Y، ولا نعد ثبات المدخل دليلًا على ملكية الناتج.

مرجع مستقل وحدود الفحص
يبني مرجع Python الناتج صفًا صفًا: يمر على صفوف A ويضم كل صف إلى الصف المقابل من B، ثم يمر على صفوف C ويضم كل صف إلى المقابل من D. يستعمل تكرار الصفوف وضم القوائم وتحويل العناصر إلى أعداد Python.
لا يستدعي المرجع block أو concatenate أو بث NumPy. يحفظ ترتيب الصفوف والأرقام الأصلي؛ لا يرتب القيم ولا يستنتج الفاصل من ألوان الرسم.
للشبكة، اخترنا ارتفاعًا علويًا من 1 إلى 3 وارتفاعًا سفليًا من 1 إلى 3. العرض الكلي w من 3 إلى 6، وعرض الكتلة اليسرى في كل جزء من 1 إلى w−1. عرض اليمنى هو الباقي الموجب.
عند كل ارتفاعين، عدد أزواج الفاصلين هو (w−1)². نجمع 4+9+16+25=54، ثم نضرب في أزواج الارتفاعين التسعة: 486 توزيعًا. منها 360 توزيعًا بفاصلين مختلفين و126 بفاصلين متساويين.
ملأنا الكتل بقيم مؤلفة: قيمة الصف i والعمود j هي start+7i+2j؛ البدايات -8 و3 و-5 و11 للكتل الأربع. هذه شبكة أشكال بفئة قيم معلنة، وليست تعدادًا لجميع القيم الممكنة.
لكل توزيع ستة فحوص: قيم block مقابل المرجع؛ ونوع الناتج وشكله؛ وتطابق مسار concatenate؛ وثبات أشكال المدخلات وبايتاتها؛ ورفض تحكم العرض؛ ورفض تحكم الارتفاع.
أضفنا للمثال نفسه ستة فحوص مماثلة، وثلاثة أخرى: الجدول الكامل المعلن؛ واختلاف الفاصلين مع تساوي العرضين الكليين؛ ورفض العدد المفرد 9 مكان B. الحساب 486×6+6+3=2925، ومرت جميعها.
النطاق قوائم بعمق اثنين، في كل قائمة كتلتان int64 غير فارغتين وثنائيتا الأبعاد. لم نفحص قوائم فارغة أو أعماقًا مختلفة أو رتبًا وأنواعًا أخرى أو تحويلات أو خيارات إخراج أو أداء أو كتابة في النتائج.
لهذه الحالة، راجع الارتفاع داخل كل قائمة أولًا ثم العرض الكلي بين الجزأين. اختلاف الفاصل الداخلي وحده ليس شاهدًا على فشل تجميع الكتل.
| الجزء | الأشكال | العرض الكلي | الفاصل |
|---|---|---|---|
| A ثم B | (2,2) / (2,3) | 5 | 2 |
| C ثم D | (1,1) / (1,4) | 5 | 1 |
| Y | (3,5) | 5 | مختلف |
للتوسع: اختيار الصفوف والأعمدة.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
