split يميز الطلب العددي المتساوي من قائمة مواضع القطع. [1] نتابع جدولًا مؤلفًا.
افحص قابلية القسمة والمحور
split العددي يطلب أجزاء متساوية؛ وإلا يرفع ValueError. المحور الافتراضي 0. [1]
نؤلف A=[[5,-3,8,1,6],[4,9,-2,7,0]]. صفان وخمسة أعمدة. الأعداد بلا وحدة، ولا تمثل بيانات تدريب أو قياسات جديدة. نقرأ الصف من اليسار إلى اليمين، ونبدأ ترقيم المواقع من صفر.
إذا طلبنا ثلاثة أجزاء على axis=1، نحتاج أن نقسم الأعمدة الخمسة بالتساوي. لا يوجد عدد صحيح من الأعمدة لكل جزء يجعل 3 أجزاء تجمع إلى 5. لذا لا نعلن ثلاثة جداول متساوية أو نحذف العمود الخامس لإكمال القسمة.
أما جزآن على axis=0 فيقسمان الصفين بالتساوي: كل جزء ذو صف واحد وخمسة أعمدة. الأول يحمل [5,-3,8,1,6]، والثاني [4,9,-2,7,0]. لم نغير مواضع الأعمدة داخل الصف.
حذف اختيار axis يترك الافتراضي المذكور، فيكون الطلب العددي 2 هنا متعلقًا بالصفوف. لا يتحول إلى عمودين، ولا يقرأ المدخل سطرًا مسطحًا؛ الفرق بين عدد الصفوف وعدد الأعمدة هو الذي يجعل هذا الاختيار مهمًا.
قبل طلب أجزاء متساوية، نحسب باقي قسمة طول المحور على عدد الأجزاء. في صفينا، 2 على 2 باقيها صفر؛ في أعمدتنا، 5 على 3 باقيها 2. هذا فحص حسابي للمثال، وليس التقاطًا لاستثناء من تشغيل NumPy.
وزع الباقي بين الأجزاء
array_split يسمح بالقسمة العددية غير المتساوية: للباقي أجزاء بطول يزيد واحدًا على خارج القسمة، وللبقية طول خارج القسمة. [2]
في أعمدتنا الخمسة، عدد الأجزاء 3. خارج القسمة الصحيحة 5//3=1، والباقي 5%3=2. نعطي أول جزأين عمودين لكل منهما، والجزء الثالث عمودًا واحدًا؛ العروض 2 ثم 2 ثم 1، ومجموعها 5.
الجزء الأول يأخذ العمودين 0 و1. صفاه [5,-3] و[4,9]، وشكله (2,2). الجزء الثاني يأخذ العمودين 2 و3، وصفاه [8,1] و[-2,7]، بالشكل نفسه. الجزء الثالث يأخذ العمود 4، فيحمل 6 في الصف الأول و0 في الثاني، بشكل (2,1).
الزيادة ليست في قيمة أي عنصر. أعطينا بعض الأجزاء عمودًا إضافيًا؛ العدد −3 بقي −3، ولم نقسمه على ثلاثة. العملية تقسم مواقع الجدول إلى جداول أصغر، لا تقسم كل عدد على عدد الأجزاء.
هذا التوزيع يحافظ في مثالنا على ترتيب الأعمدة: الأول يسبق الثاني ثم الثالث، وكل جزء يحمل شريحة متتابعة. إذا قرأناها بهذا الترتيب صفًا بصف، أمكن إعادة صف A الأول ثم الثاني دون فقدان قيمة.
اختيار التقسيم غير المتساوي يجيب عن طلب ثلاثة أجزاء، لكنه لا يجعل أشكالها متطابقة. إن كان المستهلك التالي يحتاج عدد أعمدة ثابتًا لكل جزء، نراجع حاجته بدل افتراض أن عدد الأجزاء وحده يضمن ذلك.
ميّز عدد الأجزاء من مواضع القطع
فهارس split المرتبة تحدد القطع على المحور. [1]
نختار قائمة الحدود [1,4] للأعمدة. القطع عند 1 يضع العمود ذي الفهرس 0 في الجزء الأول. والقطع عند 4 ينهي الجزء الأوسط قبل العمود ذي الفهرس 4، فيدخل فيه 1 و2 و3.
لذلك أول جزء عمود واحد بقيمتي 5 و4. الجزء الأوسط ثلاثة أعمدة، صفاه [-3,8,1] و[9,-2,7]. الجزء الأخير عمود واحد بقيمتي 6 و0. الأشكال (2,1) ثم (2,3) ثم (2,1).
الحد 1 ليس قيمة عددية نبحث عنها داخل A. صحيح أن صفنا الأول يحوي العدد 1، لكنه في العمود 3؛ القطع عند الفهرس 1 يسبق العدد −3 في الصف الأول والعدد 9 في الثاني. نحدد موقعًا عبر الصفين، لا شرطًا على قيمة العنصر.
لدينا حدان، ولهذا نحصل على ثلاثة أجزاء. عدد الحدود يزيده واحد ليعطي عدد الأجزاء في نطاقنا ذي الحدود الداخلية المرتبة المختلفة. ومع ذلك لا يعني عدد الأجزاء 3 أن العروض تتساوى.
قارن العروض 1 و3 و1 هنا بالعروض 2 و2 و1 في array_split مع العدد 3. كلا الاختيارين يعطي ثلاثة أجزاء ويحافظ على عشر قيم موزعة، لكن −3 يدخل الأول في الطلب العددي، والأوسط في قائمة الحدود.
نقصر قائمة حدودنا على فهارس مختلفة مرتبة تصاعديًا تقع داخل طول المحور، دون الطرفين. لا نختبر فهرسًا سالبًا أو مكررًا أو متجاوزًا للطول؛ الأمثلة تكفي لتمييز الحدود من عدد الأجزاء.

تتبع الحدود والأجزاء الخالية
نسمي الأعمدة المؤلفة أ وب وج ود وهـ. مع العروض 2 و2 و1، يحمل الجزء الأول أ وب، والثاني ج ود، والثالث هـ. مع الحدود [1,4]، يحمل الأول أ، والأوسط ب وج ود، والأخير هـ.
الموضع المحلي لكل جزء يبدأ من صفر، لكنه لا يلغي هوية المصدر. العمود ج كان الفهرس 2 في A، وهو الفهرس 0 في الجزء الثاني ذي العرض 2. حفظ بداية الشريحة يجعل الربط بالمصدر واضحًا.
نختار حالة عدد الأجزاء أكبر من طول المحور: خمسة أعمدة على سبعة أجزاء. خارج القسمة صفر والباقي 5، فتكون العروض 1 و1 و1 و1 و1 ثم 0 و0. في الجزأين الأخيرين يبقى صفان، لكن كليهما بلا عناصر، بالشكل (2,0).
الصفر في عرض الجزء ليس عنصرًا عدديًا نضيفه. لدينا أصلًا العدد 0 في آخر عمود من الصف الثاني، وسيظهر في الجزء الخامس ذي العرض 1. أما الجزآن الخاليان فليس فيهما هذا الصفر ولا أي قيمة أخرى.
لكي نعيد الجدول من أجزائه في مثالنا، نرتب الأجزاء وفق مواضع المصدر ثم نجمع أعمدة كل صف. تبديل الجزأين الأول والثاني مع العروض 2 و2 و1 يعطي الصف الأول [8,1,5,-3,6]، فيختلف عن A رغم بقاء عدد القيم نفسه.
نقصر الحساب على مدخل صحيح ذو بعدين وأطوال موجبة، ومحور 0 أو 1، وعدد أجزاء صحيح موجب أو حدود داخلية مرتبة مختلفة. يسمح النموذج بأجزاء خالية في الطلب العددي غير المتساوي. لم نشغل NumPy أو نختبر التخزين أو النسخ أو الزمن أو جودة تدريب؛ نراجع القيم والحدود في نموذج حساب مستقل.
| الاختيار | عروض أو أشكال الأجزاء | ما يميزه |
|---|---|---|
| split: 3، axis=1 | لا تقسيم متساوٍ | 5 لا تقبل القسمة على 3 |
| split: 2، axis=0 | (1,5)؛ (1,5) | جزآن، كل منهما صف |
| array_split: 3، axis=1 | 2؛ 2؛ 1 | الزيادة في أول جزأين |
| split: [1,4]، axis=1 | 1؛ 3؛ 1 | الحدود، لا عدد الأجزاء |
| array_split: 7، axis=1 | 1؛ 1؛ 1؛ 1؛ 1؛ 0؛ 0 | جزآن أخيران بلا قيم |
للتوسع: الأبعاد والقطر والمنقول.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
