.. _libdoc_tensor_fft:
==============================================
:mod:`tensor.fft` -- Fast Fourier Transforms
==============================================
Performs Fast Fourier Transforms (FFT).
FFT gradients are implemented as the opposite Fourier transform of the output gradients.
.. warning ::
The real and imaginary parts of the Fourier domain arrays are stored as a pair of float
arrays, emulating complex. Since pytensor has limited support for complex
number operations, care must be taken to manually implement operations such as gradients.
.. automodule:: pytensor.tensor.fft
:members: rfft, irfft
For example, the code below performs the real input FFT of a box function,
which is a sinc function. The absolute value is plotted, since the phase
oscillates due to the box function being shifted to the middle of the array.
.. testcode::
import numpy as np
import pytensor
import pytensor.tensor as pt
from pytensor.tensor import fft
x = pt.matrix('x', dtype='float64')
rfft = fft.rfft(x, norm='ortho')
f_rfft = pytensor.function([x], rfft)
N = 1024
box = np.zeros((1, N), dtype='float64')
box[:, N//2-10: N//2+10] = 1
out = f_rfft(box)
c_out = np.asarray(out[0, :, 0] + 1j*out[0, :, 1])
abs_out = abs(c_out)
.. image:: plot_fft.png