علوم وفضاء

ediff1d: هل to_begin مثل prepend؟

مدخل سبعة وسالب واحد وخمسة واثنان؛ إضافة ثلاثة عشر وسالب خمسة بعد الفرق تعطي أطرافًا ثلاثة عشر وسالب خمسة، وقبل الفرق أطرافًا سالب ستة وسالب سبعة.
الطول نفسه؛ الطرفان مختلفان.

ediff1d تضيف إلى الفروق الناتجة؛ diff تضيف إلى المدخل قبل الطرح. [1] [2]

حدد موضع الإضافة

نؤلف x=[7,−1,5,2]، ونقرأها من اليسار إلى اليمين. فيها أربع قيم بلا وحدة؛ لا تمثل قياسًا لجهاز أو مسارًا زمنيًا. نطرح كل قيمة من التالية لنحصل على فروق الجيران.

الحساب يعطي −1−7=−8، ثم 5−(−1)=6، ثم 2−5=−3. إذن الفروق [−8,6,−3] بطول ثلاثة؛ لا نقسمها على زمن ولا نسمّيها مشتقة.

to_begin وto_end يحيطان بالفروق المعادة. [1]

نختار 13 للبداية و−5 للنهاية، ثم نضعهما حول الفروق الثلاثة المحسوبة. تصبح القائمة [13,−8,6,−3,−5]. العددان الطرفيان هنا قيمتان أدخلناهما في قائمة الفروق؛ ليسا قياسين جديدين سبق أن طرحناهما.

prepend وappend يحيطان بالمدخل قبل حساب diff. [2]

مع العددين نفسيهما، نكتب المدخل الموسع [13,7,−1,5,2,−5] أولًا. أصبح لدينا ست قيم؛ بعد ذلك نأخذ خمسة فروق. موضع الإضافة في ترتيب العمليات هو الذي سنراجعه.

الطول نفسه لا يثبت العملية نفسها

أول فرق في المدخل الموسع هو 7−13=−6، وآخره −5−2=−7. أما الثلاثة الوسطى فتبقى [−8,6,−3] لأن أزواج الجيران الأصليين لم تتغير. النتيجة [−6,−8,6,−3,−7].

قارنها بحشو الناتج [13,−8,6,−3,−5]. طول القائمتين خمسة، لكن الأول مختلف: −6 مقابل 13، والأخير مختلف: −7 مقابل −5. قد تخفي مراجعة الطول فقط اختلاف معنى الطرفين.

بالرمزين p=13 وq=−5، يكتب حشو الناتج أول قيمة p وآخر قيمة q. بينما يعطي حشو المدخل أول فرق x[0]−p وآخر فرق q−x[-1]. هذه صيغ مشتقة من ترتيب القيم في نموذجنا غير الخالي.

نجمع للمراجعة: حشو الفروق يعطي 13−8+6−3−5=3. وحشو المدخل ثم الطرح يعطي −6−8+6−3−7=−18. الاختلاف ليس مجرد عرض لقيم متشابهة؛ مجموعا المثال مختلفان أيضًا.

مجموع فروق المدخل الموسع يساوي الطرف الأخير ناقص الأول: −5−13=−18، لأن الحدود الداخلية تلغى عند الجمع. أما حشو الناتج فيعطي p+(آخر x−أول x)+q=13+(2−7)−5=3. نراجع هذا الإلغاء حسابيًا دون نسبته إلى تشغيل مكتبة.

احسب الطرف اللازم للفرق المطلوب

إذا أردنا أول فرق 13، نسمي القيمة التي تسبق x باسم a ونحل 7−a=13. إذن a=7−13=−6. لا نضع 13 نفسها قبل 7، لأن 13 هي الفرق المطلوب لا القيمة السابقة المطلوبة.

ولآخر فرق −5، نسمي القيمة التي تأتي بعد x باسم b ونحل b−2=−5. إذن b=2−5=−3. نصبح أمام المدخل [−6,7,−1,5,2,−3]، وفروقه [13,−8,6,−3,−5]؛ هذه مطابقة حشو الناتج في الحساب الدقيق.

لقائمة غير خالية، والطرفين المطلوبين p وq، تكون القيمة السابقة أول x−p واللاحقة آخر x+q. التعويض يبين أول فرق p وآخر فرق q، ويترك جميع الفروق الداخلية كما هي. لا نضيف هذه القيم إلى قياسات فعلية دون إعلان أنها قيم صنعناها لتحقيق شرط طرفي.

ومع ذلك قد يتفق المساران إذا استخدمنا p وq نفسيهما بدل القيم المعدلة. نؤلف y=[26,8,3,0]. فروقها [−18,−5,−3]، وحشوها بـ13 و−5 يعطي [13,−18,−5,−3,−5].

عند وضع 13 قبل y و−5 بعدها، أول فرق 26−13=13 وآخر فرق −5−0=−5، فتتفق النتيجة. الاتفاق هنا سببه قيم الأطراف: كي يساوي أول فرق p نحتاج أول y−p=p، أي أول y=2p؛ ولكي يساوي الآخر q نحتاج q−آخر y=q، أي آخر y=0.

الشرطان ضروريان وكافيان للمسارين المحددين، لأن الجزء الداخلي متطابق أصلًا. لا يجعل نجاح المثال y الخيارين متكافئين لكل مدخل؛ المثال x خالف الشرطين فأظهر الاختلاف.

لكي يكون أول فرق ثلاثة عشر وآخره سالب خمسة، نضع سالب ستة قبل المدخل وسالب ثلاثة بعده؛ الطرح يعطي الفروق المطلوبة.
نحسب القيمة التي تحقق الفرق المطلوب.

اختبر النقل وحدود النموذج

أضف 10 لكل قيمة أصلية في x، فتكتب [17,9,15,12]. الفروق الداخلية ما زالت [−8,6,−3]؛ في كل طرح تلغى الإضافة: (التالي+10)−(السابق+10)=التالي−السابق.

إذا أبقينا حشو الناتج 13 و−5، بقيت القائمة [13,−8,6,−3,−5]. وإذا أبقينا طرفي المدخل 13 و−5، أصبح أول فرق 17−13=4 وآخره −5−12=−17، فتكون القائمة [4,−8,6,−3,−17].

زاد الأول 10 ونقص الأخير 10؛ لذلك بقي مجموع الفروق في المسار الثاني −18 رغم تغير طرفيه. تثبيت المجموع، مثل تثبيت الطول، لا يكفي لإثبات بقاء كل قيمة أو معنى إضافة الأطراف.

فحصنا 363 قائمة غير خالية، أطوالها من واحد إلى خمسة وقيمها من −2 وصفر و5. لكل قائمة اخترنا تسع تركيبات للطرفين من −3 وصفر و4، أي 3267 حالة. قارنا فروق الفهارس بطرح جارٍ مستقل بين الجيران.

راجعنا الأطراف والأطوال، والتحويل إلى القيم السابقة واللاحقة المطلوبة، وشرط الاتفاق، والنقل بمقدار 10، وإلغاء الحدود الداخلية في المجموع، وبقاء المصدر. اجتازت الحالات والأمثلة المباشرة 35944 فحصًا.

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

المسارالقائمة الناتجةالطولالمجموع
حشو الفروق13، −8، 6، −3، −553
حشو المدخل ثم الطرح−6، −8، 6، −3، −75−18
تعديل طرفي المدخل13، −8، 6، −3، −553

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

المراجع

  1. NumPy — ediff1d
  2. NumPy — diff

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