تطبق fft2 التحويل على المحورين الأخيرين افتراضيًا. [1] نقارن جدولًا مؤلفًا بقائمة تحمل القيم نفسها.
اكتب القيم وشكل المدخل
تقرأ fft محورًا واحدًا، ويكون الأخير عند غياب axis. [2] أما fft2 فتستعمل آخر محورين. [1] نحن نثبت بعدين فقط، ولا نضيف حشوًا أو نغير التطبيع.
نؤلف جدولًا من صفين وثلاثة أعمدة: A=[[2,−1,5],[0,3,4]]. نرقم الصفوف 0 و1، والأعمدة 0 و1 و2. القراءة المعلنة صفًا كاملًا ثم التالي تعطينا x=[2,−1,5,0,3,4].
على NumPy 2.3.5 أنشأنا A بنوع float64، وكتبنا x=A.ravel(order="C"). أعاد np.fft.fft2(A) شكلًا (2,3)، وأعاد np.fft.fft(x) شكلًا (6,). كلاهما complex128 في التشغيل المحفوظ.
لا نضع أسماء أيام أو مسافات على المحورين، ولا نزعم أن تغيير الشكل يضيف قياسات. هذه أعداد تعليمية بلا وحدة. المقارنة التالية تسأل عن معاملات تحويلين محددين، لا عن نسخة الذاكرة أو سرعة التنفيذ.
قارن معاملًا معلومًا
للبعدين يجمع الأس مساهمتي فهرس الصف وفهرس العمود؛ للتحويل المسطح يوجد فهرس واحد وطول ستة. الأمامي الافتراضي غير مقسوم. [3]
لنكتب F[k,l] للتحويل الثنائي وG[q] لتحويل القائمة. عند (0,1) تتلاشى مساهمة الصف من الأس، فنجمع قيم كل عمود من الصفين: [2,2,9]. مع w=−1/2−(√3/2)i يصبح F[0,1]=2+2w+9w².
الجزء الحقيقي هو 2−1−4.5=−3.5، والتخيلي (−2+9)√3/2=7√3/2. هذا نحو −3.5+6.062178i. الأرقام العشرية للعرض مقربة؛ لم نستعملها جوابًا منتظرًا في الفحص.
للقائمة نستخدم z=1/2−(√3/2)i عند q=1. نحسب G[1]=2−z+5z²+3z⁴+4z⁵. ينتج −1/2+(3√3/2)i، أي نحو −0.5+2.598076i. عنصر الصفر عند الموضع 3 لا يضيف حدًا.
عند (0,0) وعند q=0 يعطي المساران مجموع المدخل 13. لكن قيمة مشتركة واحدة لا تجعل F[0,1] وG[1] متساويتين. الزوج (k,l) والفهرس q تسميتان لبنيتين مختلفتين، رغم تساوي عدد المعاملات.
في ترتيب صفوف F المحفوظ يظهر المعامل الرابع −1+0i، بينما الرابع في G نحو 7+0i. إذن إعادة عرض المعاملات الثنائية في قائمة لا تمحو اختلاف التحويل الذي أنتجها.
اتبع المحورين على مرحلتين
يمكن فصل جمع البعدين إلى جمع على الصفوف ثم الأعمدة في تعريفنا؛ عامل الأس ينقسم إلى حاصل عاملين. [3] نتحقق من هذا الفصل على الأعداد المؤلفة.
نفذنا B=np.fft.fft(A,axis=0). طول هذا المحور اثنان، فتكون معاملات كل عمود مجموع قيمتيه ثم الفرق بينهما. الصف الأول في B هو [2,2,9]، والثاني [2,−4,1]، مع أجزاء تخيلية صفرية.
ثم نفذنا H=np.fft.fft(B,axis=1). عند الفهرس 1 من الصف الثاني يكون الجمع 2−4w+w²=3.5+(5√3/2)i، أي نحو 3.5+4.330127i. لا نضع قيم الصف الثاني في سلسلة طولها ستة خلال هاتين الخطوتين.
تطابقت H وF ضمن فرق مطلق لا يتجاوز 10⁻¹² في كل معامل مفحوص. لم نختبر مساواة بايتات الناتجين؛ مثلًا آخر رقم عائم في معامل الصف الثاني اختلف بين المرحلتين والاستدعاء المباشر.
قارنّا المخرجين بمرجع مستقل يجمع جذور الوحدة الثالثة جبريًا؛ وللقائمة استعملنا جذور الوحدة السادسة. لم نجعل خرج إحدى دوال NumPy مرجعًا صحيحًا تلقائيًا للدالة الأخرى.

اعرف ما أثبته الفحص
أضفنا تحكمًا صفريًا بالشكل نفسه، ثم 64 تركيبًا من {−2,3} في الخانات الست. مع المثال الرئيسي والتحكم صار لدينا 66 مدخلًا مختلفًا؛ الصفر ليس أحد مدخلات الشبكة.
نفذنا أربعة استدعاءات FFT مسماة لكل حالة: fft2، وfft للقائمة، وfft للمحور 0، وfft للمحور 1 على المرحلة السابقة. الإجمالي 264 استدعاءً و1584 عنصر مخرج مركب، يعد كل عنصر واحدًا عند حفظ جزأيه.
أنشأنا 66 مصفوفة مدخل، ونفذنا 66 عملية ravel خارج عدد استدعاءات FFT. راجعنا الأشكال والأنواع وثبات بايتات الجدول والقائمة. أكبر فرق عن الحساب المستقل كان نحو 1.78×10⁻¹⁵، دون تعميمه ضمانًا للدقة.
اتفق التحويل الثنائي مع المرحلتين في جميع الحالات ضمن الحد المحدد. عند قراءة الناتج الثنائي صفوفًا ومقارنته بتحويل القائمة، اتفقا في خمس حالات، منها الصفر، واختلفا في 61. هذه نتائج مجموعة مؤلفة، وليست نسبة خطأ لبيانات عامة.
اقتصر التشغيل على float64 حقيقي محدود، وشكل (2,3)، وترتيب C وتطبيع أمامي افتراضي. لم نفحص محاور أو أشكالًا أخرى أو حشوًا أو out أو قيمًا غير محدودة أو الأداء. احفظ شكل المدخل ومعنى فهارس الناتج قبل أن تقارن ستة أعداد بستة أعداد.
| المخرج | الفهرس | القيمة المقربة |
|---|---|---|
| fft2 | (0,1) | −3.5+6.062178i |
| fft للقائمة | 1 | −0.5+2.598076i |
| fft2 | (1,0) | −1+0i |
| fft للقائمة | 3 | 7+0i |
للتوسع: إعادة تشكيل الجدول.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
