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

اقرأ القيم وحدود النموذج
توثق broadcast_to منظرًا للقراءة فقط؛ قد تشير خانات متعددة إلى موضع ذاكرة واحد. [1]
قوائمنا المتداخلة تمثل القيم المنطقية والفهرسة التي حسبناها. لا تمثل تخطيط ndarray ولا تثبت مشاركة عنوان أو قابلية الكتابة. نعد 24 أو 12 موضعًا في مثالنا دون تحويل العدد إلى بايتات أو قياس كلفة تخزين.
نسترجع A من المجموعة الأولى في (4,2,3)، ونسترجع v من أي صف في (3,4). ومن العمود الموسع إلى (4,3)، نقرأ أول موضع من كل صف. هذا الاسترجاع يتبع خريطة المصدر التي اخترناها، ولا يحول النسخ المتساوية إلى مشاهدات مستقلة.
نفحص جميع الأشكال الموجبة البالغ عددها 120، من محور واحد إلى أربعة وبأطوال من 1 إلى 3، لكل من المصدر والهدف: 14400 زوج. نتحقق من التوافق، ثم من القيم والشكل وعددها وتكرار كل قيمة واسترجاع المصدر للطلبات المقبولة. أمثلة الطول 4 وأهدافه مفحوصة منفصلًا.
نقارن توسيع القوائم المتداخلة ببناء مستقل يرد كل فهرس خرج إلى فهرس المصدر المحاذى، مستبدلًا الصفر في المحاور الأصلية المفردة. نطاقنا أطوال موجبة، دون محاور بطول صفر أو سالب أو مصادر بلا محاور. لم نشغل NumPy أو نفحص سرعة أو كتابة أو ذاكرة.
| المصدر | الهدف | قرار النموذج |
|---|---|---|
| A: (2,3) | (4,2,3) | أربع مجموعات A |
| A: (2,3) | (2,4,3) | غير متوافق |
| A: (2,1,3) | (2,4,3) | أربع نسخ لكل صف |
| v: (4,) | (3,4) | ثلاثة صفوف v |
| عمود: (4,1) | (4,3) | ثلاث قيم متساوية بكل صف |
| v: (4,) | (3,1) | غير متوافق مع الهدف |
للتوسع: الأبعاد والقطر والمنقول.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
