علوم وفضاء

resize في NumPy: هل يمدد كل صف وحده؟

توسيع مؤلف من ست خانات إلى ثمان.
دورة الأعداد المؤلفة.

resize يقرأ المدخل بترتيب C. [1] نتابع مثالًا مؤلفًا.

اقرأ دورة القيم

resize يقرأ البيانات بترتيب C دون فصل المحاور. [1]

نؤلف A=[[9,−2,4],[7,0,5]]. صفان وثلاثة أعمدة، وست قيم بلا وحدة. نعطي خانات المصدر الفهارس المسطحة صفرًا ثم 1 ثم 2 ثم 3 ثم 4 ثم 5؛ عرضنا يقرأ كل صف من اليسار إلى اليمين، والأول قبل الثاني.

نطلب صفين بأربعة أعمدة: ثماني خانات بدل ست. نضع 9 ثم −2 ثم 4 ثم 7 في الصف الأول الجديد. نواصل عند 0 ثم 5 في الثاني؛ انتهت القائمة الأصلية، فنرجع إلى 9 ثم −2 حتى تكتمل الخانتان الباقيتان.

صار الناتج [[9,−2,4,7],[0,5,9,−2]]. إذا توقعت أن يبدأ الثاني عند 7 كما في الأصل، فقد افترضت تمديد كل صف وحده. لكن 7 استُعملت بالفعل لإكمال الصف الأول الجديد. تغير عرض الصف يعيد تحديد أين ينتهي كل صف في السلسلة.

تتبع الخانة الجديدة

نكتب عرض الصف الجديد v=4. موضع الخانة مسطحًا هو k=r×v+c، بترقيم الصف والعمود من صفر. بعد ست قيم نعيد الدورة، فيكون موضع المصدر هو باقي k على 6. هذه صياغة حسابية مستقلة لنموذجنا، لا نتيجة تشغيل للمكتبة.

للخانة (0,3): k=0×4+3=3، فنأخذ 7 من موضع المصدر 3، أي الصف الأصلي الثاني وعموده الأول. وللخانة (1,2): k=1×4+2=6، وباقيه صفر، فنأخذ 9. والخانة (1,3) تأخذ −2 لأن باقي 7 على 6 هو 1.

يمكن عد النسخ أيضًا: 8=1×6+2. لدينا دورة كاملة، ثم أول موضعين من دورة أخرى. لذلك تظهر 9 و−2 مرتين، وكل من 4 و7 و0 و5 مرة. مجموع القيم الجديدة 30، بينما مجموع الأصل 23؛ زيادة الخانات أعادت استعمال عددين مجموعهما 7.

عمومًا في هذا النموذج، لو كان طول المصدر الموجب L وعدد الخانات N=q×L+t حيث 0≤t<L، يظهر كل موضع q مرات، وتظهر أول t مواضع مرة إضافية. نتحدث عن المواضع؛ قيمتان متساويتان في مصدر آخر قد تخفيان أن أصلهما مختلف.

التصغير ليس قص مستطيل

نطلب الآن الشكل (2,2)، أي أربع خانات فقط. نموذج الدورة يبدأ دائمًا من أول القائمة، لذلك يضع 9 و−2 في الصف الأول، ثم 4 و7 في الثاني، ويتوقف. لم يكمل الدورة الأولى ذات الست قيم، فبقيت 0 و5 خارج هذا الناتج.

لو كان المطلوب قص المستطيل العلوي الأيسر من A مع إبقاء أول عمودين في كل صف، لكانت الصفوف [9,−2] و[7,0]. هذا اختيار هندسي آخر من الجدول: يحذف العمود الثالث ويحتفظ بصفي المصدر. أما نموذجنا فيحتفظ بمقدمة السلسلة المسطحة ويقسمها إلى صفوف بعرض جديد.

تساوي الشكل (2,2) لا يجعل النتيجتين متساويتين. في الخانة (1,0)، نرى 4 في التصغير الدوري و7 في القص المستطيلي. وفي الخانة (1,1)، نرى 7 في الأول و0 في الثاني. نحدد المطلوب من هذه المواضع قبل اختيار إجراء يحمل اسمًا عامًا مثل تغيير الحجم.

في حالة ثالثة، الشكل (3,2) يحتاج ست خانات مثل الأصل. نموذجنا يعطي [[9,−2],[4,7],[0,5]]، دون حذف أو تكرار قيمة. يوضح ذلك أن عرض الصف وحده يغير توزيع المواضع، حتى عندما يظل العدد الكلي ثابتًا.

مقدمة السلسلة تختلف عن قص المستطيل.
شكل واحد؛ ترتيبان مختلفان.

احفظ حدود المثال

تحذر وثائق resize من تغيير حجم الصور بهذه الوظيفة، لأنها لا تطبق استيفاءً على المحاور. [1]

نحتفظ في شرح المثال بالجدول الأصلي والشكل المطلوب وخريطة المصدر. إذا كانت الخانة تمثل قياسًا يحمل اسم صف واسم عمود، فتكرار الرقم لا يثبت قياسًا جديدًا لهذا الزوج. في تمريننا نعرف فقط الأعداد ومواضعها، ولا نمنح كل خانة جديدة هوية مستقلة لمجرد وجودها.

نفذنا نموذج القوائم الخاص بنا فقط: 576 حالة تجمع أطوال مصدر من 1 إلى 4 لكل بعد وأطوال هدف من صفر إلى 5 لكل بعد. قارنّا حساب الباقي بدورة مستقلة، وعدد نسخ كل موضع، والأبعاد والمقدمة والدورية وحفظ المدخل؛ ثمانية فحوص للحالة، مع ستة خاصة، تعطي 4614.

المدخل غير خالٍ. نسمح بأطوال هدف صفرية داخل النموذج؛ مثال (2,0) يعطي صفين بلا قيم، ولا نأخذ باقي القسمة على صفر لأن طول المصدر موجب. لم نشغل NumPy، أو نفحص مدخلًا خاليًا أو أشكالًا سالبة أو أنواع البيانات أو تخزين الذاكرة أو سرعة التنفيذ.

الشكل المؤلفالصف الأولالصف الثاني
توسيع (2,4)9، −2، 4، 70، 5، 9، −2
تصغير (2,2)9، −24، 7
قص مستطيل (2,2)9، −27، 0

للتوسع: الأبعاد والقطر والمنقول.

المراجع

  1. NumPy — resize

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.