تكرار فهرس المحور في axes يعني تطبيق تحويله أكثر من مرة. [1] نختبر محورًا واحدًا مذكورًا مرتين.
اقرأ axes بوصفها خطوات مطلوبة
تنص الوثائق على أن فهرسًا مكررًا في axes يجعل تحويل ذلك المحور يتكرر. [1] لذلك لا نحذف التكرار من القائمة تلقائيًا ثم نفترض أن الحساب بقي نفسه.
نؤلف x=[2,5,−1,3] في مصفوفة float64 أحادية البعد على NumPy 2.3.5. شكل المدخل (4,)، ومحوره الوحيد صفر. نمرر axes=(0,0) إلى fftn ونحدد norm="backward" صراحة.
الرقمان هنا يشيران إلى المحور نفسه. ليس لدينا محور ثانٍ يمر عبر صفوف جديدة، ولا نعيد تشكيل القائمة إلى مصفوفة ذات بعدين. جميع المخرجات المفحوصة لها شكل (4,) ونوع complex128.
لا نحدد وحدات فيزيائية أو معدل عينات، ولا نقرأ بيانات من جهاز. هذه قيم تعليمية مؤلفة؛ نثبت طولها ووضع التحجيم كي تعزل المقارنة معنى تكرار فهرس المحور.
تتبع التحويل الأول ثم الثاني
في اتفاقية backward يبقى التحويل الأمامي بلا قسمة، ويستعمل أسًا سالبًا. [2] نكتب جذور الأربع على الترتيب 1،−i،−1،i للحساب المستقل.
عند الفهرس صفر يعطي التحويل الأول 2+5−1+3=9. عند الأول نحسب 2−5i+1+3i=3−2i. عند الثاني 2−5−1−3=−7، وعند الثالث 3+2i.
أعاد np.fft.fft(x,norm="backward") القائمة [9+0i,3−2i,−7+0i,3+2i]. ثم مررنا هذا الناتج نفسه إلى fft مرة أخرى، فأعاد [8+0i,12+0i,−4+0i,20+0i].
أعاد np.fft.fftn(x,axes=(0,0),norm="backward") القيم الأربع الأخيرة نفسها. الفهرس صفر وحده يميز التحويلين: 9 في الأول و8 في المكرر، رغم تساوي الشكل والنوع.
في التنفيذ المقروء للإصدار 2.3.5 يمر المسار على مواضع قائمة المحاور ويستدعي تحويلًا لكل موضع. [3] لم نعتمد هذا الوصف وحده؛ قارنا النتائج أيضًا بمرجع حسابي مستقل.
فرّق بين التكرار والعكس
إذا سمينا جذر الأربع w=−i، يكون التحويل الثاني عند j جمعًا لحدود x[m]×w^(k×(m+j)) على m وk. جمع القوى الأربع يساوي 4 عندما يكون m+j مضاعفًا لأربع، وصفرًا في الحالات الأخرى.
إذن ينتقي الحساب m=(−j) mod 4 ويضربه في أربع. الفهارس المختارة عندما j=[0,1,2,3] هي [0,3,2,1]؛ القيم المقابلة [2,3,−1,5]، ثم يصبح الناتج [8,12,−4,20].
ليس ذلك مجرد قلب عادي للقائمة من النهاية إلى البداية: الفهرس صفر بقي صفرًا. كما أن عامل أربع يغير مقدار القيم، فلا نخلطه مع إزاحة تعيد ترتيب العناصر دون تحجيمها.
أما العكس الافتراضي لهذه الاتفاقية فيستعمل أسًا موجبًا وقسمة على N. [2] طبقنا ifft بوضع backward على التحويل الأول، فأعاد [2+0i,5+0i,−1+0i,3+0i].
إذن التحويل الأمامي الثاني والعكس يبدآن من القائمة نفسها لكنهما ينفذان جمعين مختلفين. بقيت بايتات ناتج التحويل الأول دون تغيير بعد الاستدعاءين في الفحص؛ اختلاف المخرج ليس نتيجة تعديل المدخل بينهما.

استخدم تحكمًا يكشف الاختلاف
اخترنا [0,0,0,0] تحكمًا مستقلًا. أعاد التحويل الواحد والمكرر والعكس أصفارًا؛ هذا المدخل لا يكشف تكرار خطوة الحساب، لأن كل المسارات المختبرة تبقي الصفر صفرًا.
أضفنا التركيبات الستة عشر من {−2,1} في أربع خانات. مع المثال والتحكم صار لدينا 18 مدخلًا مختلفًا، لكل منها مصفوفة مدخل جديدة. الصفر والمثال الرئيسي ليسا من عناصر الشبكة.
لكل مدخل نفذنا fft مرة، وfftn بمحور مكرر، وfft على الناتج الأول، وifft على الناتج الأول: 36 استدعاء fft و18 استدعاء fftn و18 استدعاء ifft، أي 72 استدعاءً عامًا مسمى.
لا نضيف خطوات FFT الداخلية التي ينفذها fftn إلى عد الاستدعاءات العامة. حفظنا 288 عنصر مخرج مركب؛ العنصر يعد واحدًا حين تحفظ أجزاؤه الحقيقية والتخيلية. إنشاء 18 مصفوفة مدخل خارج ذلك العد.
قارنّا كل قيمة بجذور الأربع والعلاقة المستقلة 4×x[(−j) mod 4]، أو بالأصل لمسار العكس، وفحصنا الأشكال والأنواع وثبات البايتات. كان الفرق المحفوظ صفرًا ضمن حد مطلق 10⁻¹²، دون ضمان تطابق عائم عام.
اتفق المحور المكرر مع التحويلين المتتابعين في الحالات كلها. اختلف عن التحويل الواحد وعن الأصل في المدخلات غير الصفرية السبعة عشر. لم نفحص أطوالًا أو محاور أخرى أو تسميات محاور سالبة أو s أو حشوًا أو out أو أوضاعًا أخرى أو أداءً؛ راجع تكرارات القائمة نفسها قبل اعتماد الناتج.
| j | الفهرس (−j) mod 4 | قيمة المدخل المختارة | بعد الضرب في أربع |
|---|---|---|---|
| 0 | 0 | 2 | 8 |
| 1 | 3 | 3 | 12 |
| 2 | 2 | −1 | −4 |
| 3 | 1 | 5 | 20 |
للتوسع: ميزات فورييه العشوائية.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
