| from scipy._lib.uarray import generate_multimethod, Dispatchable |
| import numpy as np |
|
|
|
|
| def _x_replacer(args, kwargs, dispatchables): |
| """ |
| uarray argument replacer to replace the transform input array (``x``) |
| """ |
| if len(args) > 0: |
| return (dispatchables[0],) + args[1:], kwargs |
| kw = kwargs.copy() |
| kw['x'] = dispatchables[0] |
| return args, kw |
|
|
|
|
| def _dispatch(func): |
| """ |
| Function annotation that creates a uarray multimethod from the function |
| """ |
| return generate_multimethod(func, _x_replacer, domain="numpy.scipy.fft") |
|
|
|
|
| @_dispatch |
| def fft(x, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 1-D discrete Fourier Transform. |
| |
| This function computes the 1-D *n*-point discrete Fourier |
| Transform (DFT) with the efficient Fast Fourier Transform (FFT) |
| algorithm [1]_. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, can be complex. |
| n : int, optional |
| Length of the transformed axis of the output. |
| If `n` is smaller than the length of the input, the input is cropped. |
| If it is larger, the input is padded with zeros. If `n` is not given, |
| the length of the input along the axis specified by `axis` is used. |
| axis : int, optional |
| Axis over which to compute the FFT. If not given, the last axis is |
| used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode. Default is "backward", meaning no normalization on |
| the forward transforms and scaling by ``1/n`` on the `ifft`. |
| "forward" instead applies the ``1/n`` factor on the forward transform. |
| For ``norm="ortho"``, both directions are scaled by ``1/sqrt(n)``. |
| |
| .. versionadded:: 1.6.0 |
| ``norm={"forward", "backward"}`` options were added |
| |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See the notes below for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. See below for more |
| details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axis |
| indicated by `axis`, or the last one if `axis` is not specified. |
| |
| Raises |
| ------ |
| IndexError |
| if `axes` is larger than the last axis of `x`. |
| |
| See Also |
| -------- |
| ifft : The inverse of `fft`. |
| fft2 : The 2-D FFT. |
| fftn : The N-D FFT. |
| rfftn : The N-D FFT of real input. |
| fftfreq : Frequency bins for given FFT parameters. |
| next_fast_len : Size to pad input to for most efficient transforms |
| |
| Notes |
| ----- |
| FFT (Fast Fourier Transform) refers to a way the discrete Fourier Transform |
| (DFT) can be calculated efficiently, by using symmetries in the calculated |
| terms. The symmetry is highest when `n` is a power of 2, and the transform |
| is therefore most efficient for these sizes. For poorly factorizable sizes, |
| `scipy.fft` uses Bluestein's algorithm [2]_ and so is never worse than |
| O(`n` log `n`). Further performance improvements may be seen by zero-padding |
| the input using `next_fast_len`. |
| |
| If ``x`` is a 1d array, then the `fft` is equivalent to :: |
| |
| y[k] = np.sum(x * np.exp(-2j * np.pi * k * np.arange(n)/n)) |
| |
| The frequency term ``f=k/n`` is found at ``y[k]``. At ``y[n/2]`` we reach |
| the Nyquist frequency and wrap around to the negative-frequency terms. So, |
| for an 8-point transform, the frequencies of the result are |
| [0, 1, 2, 3, -4, -3, -2, -1]. To rearrange the fft output so that the |
| zero-frequency component is centered, like [-4, -3, -2, -1, 0, 1, 2, 3], |
| use `fftshift`. |
| |
| Transforms can be done in single, double, or extended precision (long |
| double) floating point. Half precision inputs will be converted to single |
| precision and non-floating-point inputs will be converted to double |
| precision. |
| |
| If the data type of ``x`` is real, a "real FFT" algorithm is automatically |
| used, which roughly halves the computation time. To increase efficiency |
| a little further, use `rfft`, which does the same calculation, but only |
| outputs half of the symmetrical spectrum. If the data are both real and |
| symmetrical, the `dct` can again double the efficiency, by generating |
| half of the spectrum from half of the signal. |
| |
| When ``overwrite_x=True`` is specified, the memory referenced by ``x`` may |
| be used by the implementation in any way. This may include reusing the |
| memory for the result, but this is in no way guaranteed. You should not |
| rely on the contents of ``x`` after the transform as this may change in |
| future without warning. |
| |
| The ``workers`` argument specifies the maximum number of parallel jobs to |
| split the FFT computation into. This will execute independent 1-D |
| FFTs within ``x``. So, ``x`` must be at least 2-D and the |
| non-transformed axes must be large enough to split into chunks. If ``x`` is |
| too small, fewer jobs may be used than requested. |
| |
| References |
| ---------- |
| .. [1] Cooley, James W., and John W. Tukey, 1965, "An algorithm for the |
| machine calculation of complex Fourier series," *Math. Comput.* |
| 19: 297-301. |
| .. [2] Bluestein, L., 1970, "A linear filtering approach to the |
| computation of discrete Fourier transform". *IEEE Transactions on |
| Audio and Electroacoustics.* 18 (4): 451-455. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> scipy.fft.fft(np.exp(2j * np.pi * np.arange(8) / 8)) |
| array([-2.33486982e-16+1.14423775e-17j, 8.00000000e+00-1.25557246e-15j, |
| 2.33486982e-16+2.33486982e-16j, 0.00000000e+00+1.22464680e-16j, |
| -1.14423775e-17+2.33486982e-16j, 0.00000000e+00+5.20784380e-16j, |
| 1.14423775e-17+1.14423775e-17j, 0.00000000e+00+1.22464680e-16j]) |
| |
| In this example, real input has an FFT which is Hermitian, i.e., symmetric |
| in the real part and anti-symmetric in the imaginary part: |
| |
| >>> from scipy.fft import fft, fftfreq, fftshift |
| >>> import matplotlib.pyplot as plt |
| >>> t = np.arange(256) |
| >>> sp = fftshift(fft(np.sin(t))) |
| >>> freq = fftshift(fftfreq(t.shape[-1])) |
| >>> plt.plot(freq, sp.real, freq, sp.imag) |
| [<matplotlib.lines.Line2D object at 0x...>, |
| <matplotlib.lines.Line2D object at 0x...>] |
| >>> plt.show() |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def ifft(x, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 1-D inverse discrete Fourier Transform. |
| |
| This function computes the inverse of the 1-D *n*-point |
| discrete Fourier transform computed by `fft`. In other words, |
| ``ifft(fft(x)) == x`` to within numerical accuracy. |
| |
| The input should be ordered in the same way as is returned by `fft`, |
| i.e., |
| |
| * ``x[0]`` should contain the zero frequency term, |
| * ``x[1:n//2]`` should contain the positive-frequency terms, |
| * ``x[n//2 + 1:]`` should contain the negative-frequency terms, in |
| increasing order starting from the most negative frequency. |
| |
| For an even number of input points, ``x[n//2]`` represents the sum of |
| the values at the positive and negative Nyquist frequencies, as the two |
| are aliased together. See `fft` for details. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, can be complex. |
| n : int, optional |
| Length of the transformed axis of the output. |
| If `n` is smaller than the length of the input, the input is cropped. |
| If it is larger, the input is padded with zeros. If `n` is not given, |
| the length of the input along the axis specified by `axis` is used. |
| See notes about padding issues. |
| axis : int, optional |
| Axis over which to compute the inverse DFT. If not given, the last |
| axis is used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axis |
| indicated by `axis`, or the last one if `axis` is not specified. |
| |
| Raises |
| ------ |
| IndexError |
| If `axes` is larger than the last axis of `x`. |
| |
| See Also |
| -------- |
| fft : The 1-D (forward) FFT, of which `ifft` is the inverse. |
| ifft2 : The 2-D inverse FFT. |
| ifftn : The N-D inverse FFT. |
| |
| Notes |
| ----- |
| If the input parameter `n` is larger than the size of the input, the input |
| is padded by appending zeros at the end. Even though this is the common |
| approach, it might lead to surprising results. If a different padding is |
| desired, it must be performed before calling `ifft`. |
| |
| If ``x`` is a 1-D array, then the `ifft` is equivalent to :: |
| |
| y[k] = np.sum(x * np.exp(2j * np.pi * k * np.arange(n)/n)) / len(x) |
| |
| As with `fft`, `ifft` has support for all floating point types and is |
| optimized for real input. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> scipy.fft.ifft([0, 4, 0, 0]) |
| array([ 1.+0.j, 0.+1.j, -1.+0.j, 0.-1.j]) # may vary |
| |
| Create and plot a band-limited signal with random phases: |
| |
| >>> import matplotlib.pyplot as plt |
| >>> rng = np.random.default_rng() |
| >>> t = np.arange(400) |
| >>> n = np.zeros((400,), dtype=complex) |
| >>> n[40:60] = np.exp(1j*rng.uniform(0, 2*np.pi, (20,))) |
| >>> s = scipy.fft.ifft(n) |
| >>> plt.plot(t, s.real, 'b-', t, s.imag, 'r--') |
| [<matplotlib.lines.Line2D object at ...>, <matplotlib.lines.Line2D object at ...>] |
| >>> plt.legend(('real', 'imaginary')) |
| <matplotlib.legend.Legend object at ...> |
| >>> plt.show() |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def rfft(x, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 1-D discrete Fourier Transform for real input. |
| |
| This function computes the 1-D *n*-point discrete Fourier |
| Transform (DFT) of a real-valued array by means of an efficient algorithm |
| called the Fast Fourier Transform (FFT). |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array |
| n : int, optional |
| Number of points along transformation axis in the input to use. |
| If `n` is smaller than the length of the input, the input is cropped. |
| If it is larger, the input is padded with zeros. If `n` is not given, |
| the length of the input along the axis specified by `axis` is used. |
| axis : int, optional |
| Axis over which to compute the FFT. If not given, the last axis is |
| used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axis |
| indicated by `axis`, or the last one if `axis` is not specified. |
| If `n` is even, the length of the transformed axis is ``(n/2)+1``. |
| If `n` is odd, the length is ``(n+1)/2``. |
| |
| Raises |
| ------ |
| IndexError |
| If `axis` is larger than the last axis of `a`. |
| |
| See Also |
| -------- |
| irfft : The inverse of `rfft`. |
| fft : The 1-D FFT of general (complex) input. |
| fftn : The N-D FFT. |
| rfft2 : The 2-D FFT of real input. |
| rfftn : The N-D FFT of real input. |
| |
| Notes |
| ----- |
| When the DFT is computed for purely real input, the output is |
| Hermitian-symmetric, i.e., the negative frequency terms are just the complex |
| conjugates of the corresponding positive-frequency terms, and the |
| negative-frequency terms are therefore redundant. This function does not |
| compute the negative frequency terms, and the length of the transformed |
| axis of the output is therefore ``n//2 + 1``. |
| |
| When ``X = rfft(x)`` and fs is the sampling frequency, ``X[0]`` contains |
| the zero-frequency term 0*fs, which is real due to Hermitian symmetry. |
| |
| If `n` is even, ``A[-1]`` contains the term representing both positive |
| and negative Nyquist frequency (+fs/2 and -fs/2), and must also be purely |
| real. If `n` is odd, there is no term at fs/2; ``A[-1]`` contains |
| the largest positive frequency (fs/2*(n-1)/n), and is complex in the |
| general case. |
| |
| If the input `a` contains an imaginary part, it is silently discarded. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> scipy.fft.fft([0, 1, 0, 0]) |
| array([ 1.+0.j, 0.-1.j, -1.+0.j, 0.+1.j]) # may vary |
| >>> scipy.fft.rfft([0, 1, 0, 0]) |
| array([ 1.+0.j, 0.-1.j, -1.+0.j]) # may vary |
| |
| Notice how the final element of the `fft` output is the complex conjugate |
| of the second element, for real input. For `rfft`, this symmetry is |
| exploited to compute only the non-negative frequency terms. |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def irfft(x, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Computes the inverse of `rfft`. |
| |
| This function computes the inverse of the 1-D *n*-point |
| discrete Fourier Transform of real input computed by `rfft`. |
| In other words, ``irfft(rfft(x), len(x)) == x`` to within numerical |
| accuracy. (See Notes below for why ``len(a)`` is necessary here.) |
| |
| The input is expected to be in the form returned by `rfft`, i.e., the |
| real zero-frequency term followed by the complex positive frequency terms |
| in order of increasing frequency. Since the discrete Fourier Transform of |
| real input is Hermitian-symmetric, the negative frequency terms are taken |
| to be the complex conjugates of the corresponding positive frequency terms. |
| |
| Parameters |
| ---------- |
| x : array_like |
| The input array. |
| n : int, optional |
| Length of the transformed axis of the output. |
| For `n` output points, ``n//2+1`` input points are necessary. If the |
| input is longer than this, it is cropped. If it is shorter than this, |
| it is padded with zeros. If `n` is not given, it is taken to be |
| ``2*(m-1)``, where ``m`` is the length of the input along the axis |
| specified by `axis`. |
| axis : int, optional |
| Axis over which to compute the inverse FFT. If not given, the last |
| axis is used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The truncated or zero-padded input, transformed along the axis |
| indicated by `axis`, or the last one if `axis` is not specified. |
| The length of the transformed axis is `n`, or, if `n` is not given, |
| ``2*(m-1)`` where ``m`` is the length of the transformed axis of the |
| input. To get an odd number of output points, `n` must be specified. |
| |
| Raises |
| ------ |
| IndexError |
| If `axis` is larger than the last axis of `x`. |
| |
| See Also |
| -------- |
| rfft : The 1-D FFT of real input, of which `irfft` is inverse. |
| fft : The 1-D FFT. |
| irfft2 : The inverse of the 2-D FFT of real input. |
| irfftn : The inverse of the N-D FFT of real input. |
| |
| Notes |
| ----- |
| Returns the real valued `n`-point inverse discrete Fourier transform |
| of `x`, where `x` contains the non-negative frequency terms of a |
| Hermitian-symmetric sequence. `n` is the length of the result, not the |
| input. |
| |
| If you specify an `n` such that `a` must be zero-padded or truncated, the |
| extra/removed values will be added/removed at high frequencies. One can |
| thus resample a series to `m` points via Fourier interpolation by: |
| ``a_resamp = irfft(rfft(a), m)``. |
| |
| The default value of `n` assumes an even output length. By the Hermitian |
| symmetry, the last imaginary component must be 0 and so is ignored. To |
| avoid losing information, the correct length of the real input *must* be |
| given. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> scipy.fft.ifft([1, -1j, -1, 1j]) |
| array([0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j]) # may vary |
| >>> scipy.fft.irfft([1, -1j, -1]) |
| array([0., 1., 0., 0.]) |
| |
| Notice how the last term in the input to the ordinary `ifft` is the |
| complex conjugate of the second term, and the output has zero imaginary |
| part everywhere. When calling `irfft`, the negative frequencies are not |
| specified, and the output array is purely real. |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def hfft(x, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the FFT of a signal that has Hermitian symmetry, i.e., a real |
| spectrum. |
| |
| Parameters |
| ---------- |
| x : array_like |
| The input array. |
| n : int, optional |
| Length of the transformed axis of the output. For `n` output |
| points, ``n//2 + 1`` input points are necessary. If the input is |
| longer than this, it is cropped. If it is shorter than this, it is |
| padded with zeros. If `n` is not given, it is taken to be ``2*(m-1)``, |
| where ``m`` is the length of the input along the axis specified by |
| `axis`. |
| axis : int, optional |
| Axis over which to compute the FFT. If not given, the last |
| axis is used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See `fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The truncated or zero-padded input, transformed along the axis |
| indicated by `axis`, or the last one if `axis` is not specified. |
| The length of the transformed axis is `n`, or, if `n` is not given, |
| ``2*m - 2``, where ``m`` is the length of the transformed axis of |
| the input. To get an odd number of output points, `n` must be |
| specified, for instance, as ``2*m - 1`` in the typical case, |
| |
| Raises |
| ------ |
| IndexError |
| If `axis` is larger than the last axis of `a`. |
| |
| See Also |
| -------- |
| rfft : Compute the 1-D FFT for real input. |
| ihfft : The inverse of `hfft`. |
| hfftn : Compute the N-D FFT of a Hermitian signal. |
| |
| Notes |
| ----- |
| `hfft`/`ihfft` are a pair analogous to `rfft`/`irfft`, but for the |
| opposite case: here the signal has Hermitian symmetry in the time |
| domain and is real in the frequency domain. So, here, it's `hfft`, for |
| which you must supply the length of the result if it is to be odd. |
| * even: ``ihfft(hfft(a, 2*len(a) - 2) == a``, within roundoff error, |
| * odd: ``ihfft(hfft(a, 2*len(a) - 1) == a``, within roundoff error. |
| |
| Examples |
| -------- |
| >>> from scipy.fft import fft, hfft |
| >>> import numpy as np |
| >>> a = 2 * np.pi * np.arange(10) / 10 |
| >>> signal = np.cos(a) + 3j * np.sin(3 * a) |
| >>> fft(signal).round(10) |
| array([ -0.+0.j, 5.+0.j, -0.+0.j, 15.-0.j, 0.+0.j, 0.+0.j, |
| -0.+0.j, -15.-0.j, 0.+0.j, 5.+0.j]) |
| >>> hfft(signal[:6]).round(10) # Input first half of signal |
| array([ 0., 5., 0., 15., -0., 0., 0., -15., -0., 5.]) |
| >>> hfft(signal, 10) # Input entire signal and truncate |
| array([ 0., 5., 0., 15., -0., 0., 0., -15., -0., 5.]) |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def ihfft(x, n=None, axis=-1, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the inverse FFT of a signal that has Hermitian symmetry. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array. |
| n : int, optional |
| Length of the inverse FFT, the number of points along |
| transformation axis in the input to use. If `n` is smaller than |
| the length of the input, the input is cropped. If it is larger, |
| the input is padded with zeros. If `n` is not given, the length of |
| the input along the axis specified by `axis` is used. |
| axis : int, optional |
| Axis over which to compute the inverse FFT. If not given, the last |
| axis is used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See `fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axis |
| indicated by `axis`, or the last one if `axis` is not specified. |
| The length of the transformed axis is ``n//2 + 1``. |
| |
| See Also |
| -------- |
| hfft, irfft |
| |
| Notes |
| ----- |
| `hfft`/`ihfft` are a pair analogous to `rfft`/`irfft`, but for the |
| opposite case: here, the signal has Hermitian symmetry in the time |
| domain and is real in the frequency domain. So, here, it's `hfft`, for |
| which you must supply the length of the result if it is to be odd: |
| * even: ``ihfft(hfft(a, 2*len(a) - 2) == a``, within roundoff error, |
| * odd: ``ihfft(hfft(a, 2*len(a) - 1) == a``, within roundoff error. |
| |
| Examples |
| -------- |
| >>> from scipy.fft import ifft, ihfft |
| >>> import numpy as np |
| >>> spectrum = np.array([ 15, -4, 0, -1, 0, -4]) |
| >>> ifft(spectrum) |
| array([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 3.+0.j, 2.+0.j]) # may vary |
| >>> ihfft(spectrum) |
| array([ 1.-0.j, 2.-0.j, 3.-0.j, 4.-0.j]) # may vary |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def fftn(x, s=None, axes=None, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the N-D discrete Fourier Transform. |
| |
| This function computes the N-D discrete Fourier Transform over |
| any number of axes in an M-D array by means of the Fast Fourier |
| Transform (FFT). |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, can be complex. |
| s : sequence of ints, optional |
| Shape (length of each transformed axis) of the output |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). |
| This corresponds to ``n`` for ``fft(x, n)``. |
| Along any axis, if the given shape is smaller than that of the input, |
| the input is cropped. If it is larger, the input is padded with zeros. |
| if `s` is not given, the shape of the input along the axes specified |
| by `axes` is used. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. If not given, the last ``len(s)`` |
| axes are used, or all axes if `s` is also not specified. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or by a combination of `s` and `x`, |
| as explained in the parameters section above. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| ifftn : The inverse of `fftn`, the inverse N-D FFT. |
| fft : The 1-D FFT, with definitions and conventions used. |
| rfftn : The N-D FFT of real input. |
| fft2 : The 2-D FFT. |
| fftshift : Shifts zero-frequency terms to centre of array. |
| |
| Notes |
| ----- |
| The output, analogously to `fft`, contains the term for zero frequency in |
| the low-order corner of all axes, the positive frequency terms in the |
| first half of all axes, the term for the Nyquist frequency in the middle |
| of all axes and the negative frequency terms in the second half of all |
| axes, in order of decreasingly negative frequency. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.mgrid[:3, :3, :3][0] |
| >>> scipy.fft.fftn(x, axes=(1, 2)) |
| array([[[ 0.+0.j, 0.+0.j, 0.+0.j], # may vary |
| [ 0.+0.j, 0.+0.j, 0.+0.j], |
| [ 0.+0.j, 0.+0.j, 0.+0.j]], |
| [[ 9.+0.j, 0.+0.j, 0.+0.j], |
| [ 0.+0.j, 0.+0.j, 0.+0.j], |
| [ 0.+0.j, 0.+0.j, 0.+0.j]], |
| [[18.+0.j, 0.+0.j, 0.+0.j], |
| [ 0.+0.j, 0.+0.j, 0.+0.j], |
| [ 0.+0.j, 0.+0.j, 0.+0.j]]]) |
| >>> scipy.fft.fftn(x, (2, 2), axes=(0, 1)) |
| array([[[ 2.+0.j, 2.+0.j, 2.+0.j], # may vary |
| [ 0.+0.j, 0.+0.j, 0.+0.j]], |
| [[-2.+0.j, -2.+0.j, -2.+0.j], |
| [ 0.+0.j, 0.+0.j, 0.+0.j]]]) |
| |
| >>> import matplotlib.pyplot as plt |
| >>> rng = np.random.default_rng() |
| >>> [X, Y] = np.meshgrid(2 * np.pi * np.arange(200) / 12, |
| ... 2 * np.pi * np.arange(200) / 34) |
| >>> S = np.sin(X) + np.cos(Y) + rng.uniform(0, 1, X.shape) |
| >>> FS = scipy.fft.fftn(S) |
| >>> plt.imshow(np.log(np.abs(scipy.fft.fftshift(FS))**2)) |
| <matplotlib.image.AxesImage object at 0x...> |
| >>> plt.show() |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def ifftn(x, s=None, axes=None, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the N-D inverse discrete Fourier Transform. |
| |
| This function computes the inverse of the N-D discrete |
| Fourier Transform over any number of axes in an M-D array by |
| means of the Fast Fourier Transform (FFT). In other words, |
| ``ifftn(fftn(x)) == x`` to within numerical accuracy. |
| |
| The input, analogously to `ifft`, should be ordered in the same way as is |
| returned by `fftn`, i.e., it should have the term for zero frequency |
| in all axes in the low-order corner, the positive frequency terms in the |
| first half of all axes, the term for the Nyquist frequency in the middle |
| of all axes and the negative frequency terms in the second half of all |
| axes, in order of decreasingly negative frequency. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, can be complex. |
| s : sequence of ints, optional |
| Shape (length of each transformed axis) of the output |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). |
| This corresponds to ``n`` for ``ifft(x, n)``. |
| Along any axis, if the given shape is smaller than that of the input, |
| the input is cropped. If it is larger, the input is padded with zeros. |
| if `s` is not given, the shape of the input along the axes specified |
| by `axes` is used. See notes for issue on `ifft` zero padding. |
| axes : sequence of ints, optional |
| Axes over which to compute the IFFT. If not given, the last ``len(s)`` |
| axes are used, or all axes if `s` is also not specified. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or by a combination of `s` or `x`, |
| as explained in the parameters section above. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| fftn : The forward N-D FFT, of which `ifftn` is the inverse. |
| ifft : The 1-D inverse FFT. |
| ifft2 : The 2-D inverse FFT. |
| ifftshift : Undoes `fftshift`, shifts zero-frequency terms to beginning |
| of array. |
| |
| Notes |
| ----- |
| Zero-padding, analogously with `ifft`, is performed by appending zeros to |
| the input along the specified dimension. Although this is the common |
| approach, it might lead to surprising results. If another form of zero |
| padding is desired, it must be performed before `ifftn` is called. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.eye(4) |
| >>> scipy.fft.ifftn(scipy.fft.fftn(x, axes=(0,)), axes=(1,)) |
| array([[1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], # may vary |
| [0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j], |
| [0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], |
| [0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j]]) |
| |
| |
| Create and plot an image with band-limited frequency content: |
| |
| >>> import matplotlib.pyplot as plt |
| >>> rng = np.random.default_rng() |
| >>> n = np.zeros((200,200), dtype=complex) |
| >>> n[60:80, 20:40] = np.exp(1j*rng.uniform(0, 2*np.pi, (20, 20))) |
| >>> im = scipy.fft.ifftn(n).real |
| >>> plt.imshow(im) |
| <matplotlib.image.AxesImage object at 0x...> |
| >>> plt.show() |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def fft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 2-D discrete Fourier Transform |
| |
| This function computes the N-D discrete Fourier Transform |
| over any axes in an M-D array by means of the |
| Fast Fourier Transform (FFT). By default, the transform is computed over |
| the last two axes of the input array, i.e., a 2-dimensional FFT. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, can be complex |
| s : sequence of ints, optional |
| Shape (length of each transformed axis) of the output |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). |
| This corresponds to ``n`` for ``fft(x, n)``. |
| Along each axis, if the given shape is smaller than that of the input, |
| the input is cropped. If it is larger, the input is padded with zeros. |
| if `s` is not given, the shape of the input along the axes specified |
| by `axes` is used. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. If not given, the last two axes are |
| used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or the last two axes if `axes` is not given. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length, or `axes` not given and |
| ``len(s) != 2``. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| ifft2 : The inverse 2-D FFT. |
| fft : The 1-D FFT. |
| fftn : The N-D FFT. |
| fftshift : Shifts zero-frequency terms to the center of the array. |
| For 2-D input, swaps first and third quadrants, and second |
| and fourth quadrants. |
| |
| Notes |
| ----- |
| `fft2` is just `fftn` with a different default for `axes`. |
| |
| The output, analogously to `fft`, contains the term for zero frequency in |
| the low-order corner of the transformed axes, the positive frequency terms |
| in the first half of these axes, the term for the Nyquist frequency in the |
| middle of the axes and the negative frequency terms in the second half of |
| the axes, in order of decreasingly negative frequency. |
| |
| See `fftn` for details and a plotting example, and `fft` for |
| definitions and conventions used. |
| |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.mgrid[:5, :5][0] |
| >>> scipy.fft.fft2(x) |
| array([[ 50. +0.j , 0. +0.j , 0. +0.j , # may vary |
| 0. +0.j , 0. +0.j ], |
| [-12.5+17.20477401j, 0. +0.j , 0. +0.j , |
| 0. +0.j , 0. +0.j ], |
| [-12.5 +4.0614962j , 0. +0.j , 0. +0.j , |
| 0. +0.j , 0. +0.j ], |
| [-12.5 -4.0614962j , 0. +0.j , 0. +0.j , |
| 0. +0.j , 0. +0.j ], |
| [-12.5-17.20477401j, 0. +0.j , 0. +0.j , |
| 0. +0.j , 0. +0.j ]]) |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def ifft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 2-D inverse discrete Fourier Transform. |
| |
| This function computes the inverse of the 2-D discrete Fourier |
| Transform over any number of axes in an M-D array by means of |
| the Fast Fourier Transform (FFT). In other words, ``ifft2(fft2(x)) == x`` |
| to within numerical accuracy. By default, the inverse transform is |
| computed over the last two axes of the input array. |
| |
| The input, analogously to `ifft`, should be ordered in the same way as is |
| returned by `fft2`, i.e., it should have the term for zero frequency |
| in the low-order corner of the two axes, the positive frequency terms in |
| the first half of these axes, the term for the Nyquist frequency in the |
| middle of the axes and the negative frequency terms in the second half of |
| both axes, in order of decreasingly negative frequency. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, can be complex. |
| s : sequence of ints, optional |
| Shape (length of each axis) of the output (``s[0]`` refers to axis 0, |
| ``s[1]`` to axis 1, etc.). This corresponds to `n` for ``ifft(x, n)``. |
| Along each axis, if the given shape is smaller than that of the input, |
| the input is cropped. If it is larger, the input is padded with zeros. |
| if `s` is not given, the shape of the input along the axes specified |
| by `axes` is used. See notes for issue on `ifft` zero padding. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. If not given, the last two |
| axes are used. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or the last two axes if `axes` is not given. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length, or `axes` not given and |
| ``len(s) != 2``. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| fft2 : The forward 2-D FFT, of which `ifft2` is the inverse. |
| ifftn : The inverse of the N-D FFT. |
| fft : The 1-D FFT. |
| ifft : The 1-D inverse FFT. |
| |
| Notes |
| ----- |
| `ifft2` is just `ifftn` with a different default for `axes`. |
| |
| See `ifftn` for details and a plotting example, and `fft` for |
| definition and conventions used. |
| |
| Zero-padding, analogously with `ifft`, is performed by appending zeros to |
| the input along the specified dimension. Although this is the common |
| approach, it might lead to surprising results. If another form of zero |
| padding is desired, it must be performed before `ifft2` is called. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = 4 * np.eye(4) |
| >>> scipy.fft.ifft2(x) |
| array([[1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], # may vary |
| [0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j], |
| [0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], |
| [0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j]]) |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def rfftn(x, s=None, axes=None, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the N-D discrete Fourier Transform for real input. |
| |
| This function computes the N-D discrete Fourier Transform over |
| any number of axes in an M-D real array by means of the Fast |
| Fourier Transform (FFT). By default, all axes are transformed, with the |
| real transform performed over the last axis, while the remaining |
| transforms are complex. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, taken to be real. |
| s : sequence of ints, optional |
| Shape (length along each transformed axis) to use from the input. |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). |
| The final element of `s` corresponds to `n` for ``rfft(x, n)``, while |
| for the remaining axes, it corresponds to `n` for ``fft(x, n)``. |
| Along any axis, if the given shape is smaller than that of the input, |
| the input is cropped. If it is larger, the input is padded with zeros. |
| if `s` is not given, the shape of the input along the axes specified |
| by `axes` is used. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. If not given, the last ``len(s)`` |
| axes are used, or all axes if `s` is also not specified. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or by a combination of `s` and `x`, |
| as explained in the parameters section above. |
| The length of the last axis transformed will be ``s[-1]//2+1``, |
| while the remaining transformed axes will have lengths according to |
| `s`, or unchanged from the input. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| irfftn : The inverse of `rfftn`, i.e., the inverse of the N-D FFT |
| of real input. |
| fft : The 1-D FFT, with definitions and conventions used. |
| rfft : The 1-D FFT of real input. |
| fftn : The N-D FFT. |
| rfft2 : The 2-D FFT of real input. |
| |
| Notes |
| ----- |
| The transform for real input is performed over the last transformation |
| axis, as by `rfft`, then the transform over the remaining axes is |
| performed as by `fftn`. The order of the output is as for `rfft` for the |
| final transformation axis, and as for `fftn` for the remaining |
| transformation axes. |
| |
| See `fft` for details, definitions and conventions used. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.ones((2, 2, 2)) |
| >>> scipy.fft.rfftn(x) |
| array([[[8.+0.j, 0.+0.j], # may vary |
| [0.+0.j, 0.+0.j]], |
| [[0.+0.j, 0.+0.j], |
| [0.+0.j, 0.+0.j]]]) |
| |
| >>> scipy.fft.rfftn(x, axes=(2, 0)) |
| array([[[4.+0.j, 0.+0.j], # may vary |
| [4.+0.j, 0.+0.j]], |
| [[0.+0.j, 0.+0.j], |
| [0.+0.j, 0.+0.j]]]) |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def rfft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 2-D FFT of a real array. |
| |
| Parameters |
| ---------- |
| x : array |
| Input array, taken to be real. |
| s : sequence of ints, optional |
| Shape of the FFT. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The result of the real 2-D FFT. |
| |
| See Also |
| -------- |
| irfft2 : The inverse of the 2-D FFT of real input. |
| rfft : The 1-D FFT of real input. |
| rfftn : Compute the N-D discrete Fourier Transform for real |
| input. |
| |
| Notes |
| ----- |
| This is really just `rfftn` with different default behavior. |
| For more details see `rfftn`. |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def irfftn(x, s=None, axes=None, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Computes the inverse of `rfftn` |
| |
| This function computes the inverse of the N-D discrete |
| Fourier Transform for real input over any number of axes in an |
| M-D array by means of the Fast Fourier Transform (FFT). In |
| other words, ``irfftn(rfftn(x), x.shape) == x`` to within numerical |
| accuracy. (The ``a.shape`` is necessary like ``len(a)`` is for `irfft`, |
| and for the same reason.) |
| |
| The input should be ordered in the same way as is returned by `rfftn`, |
| i.e., as for `irfft` for the final transformation axis, and as for `ifftn` |
| along all the other axes. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array. |
| s : sequence of ints, optional |
| Shape (length of each transformed axis) of the output |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). `s` is also the |
| number of input points used along this axis, except for the last axis, |
| where ``s[-1]//2+1`` points of the input are used. |
| Along any axis, if the shape indicated by `s` is smaller than that of |
| the input, the input is cropped. If it is larger, the input is padded |
| with zeros. If `s` is not given, the shape of the input along the axes |
| specified by axes is used. Except for the last axis which is taken to be |
| ``2*(m-1)``, where ``m`` is the length of the input along that axis. |
| axes : sequence of ints, optional |
| Axes over which to compute the inverse FFT. If not given, the last |
| `len(s)` axes are used, or all axes if `s` is also not specified. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or by a combination of `s` or `x`, |
| as explained in the parameters section above. |
| The length of each transformed axis is as given by the corresponding |
| element of `s`, or the length of the input in every axis except for the |
| last one if `s` is not given. In the final transformed axis the length |
| of the output when `s` is not given is ``2*(m-1)``, where ``m`` is the |
| length of the final transformed axis of the input. To get an odd |
| number of output points in the final axis, `s` must be specified. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| rfftn : The forward N-D FFT of real input, |
| of which `ifftn` is the inverse. |
| fft : The 1-D FFT, with definitions and conventions used. |
| irfft : The inverse of the 1-D FFT of real input. |
| irfft2 : The inverse of the 2-D FFT of real input. |
| |
| Notes |
| ----- |
| See `fft` for definitions and conventions used. |
| |
| See `rfft` for definitions and conventions used for real input. |
| |
| The default value of `s` assumes an even output length in the final |
| transformation axis. When performing the final complex to real |
| transformation, the Hermitian symmetry requires that the last imaginary |
| component along that axis must be 0 and so it is ignored. To avoid losing |
| information, the correct length of the real input *must* be given. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.zeros((3, 2, 2)) |
| >>> x[0, 0, 0] = 3 * 2 * 2 |
| >>> scipy.fft.irfftn(x) |
| array([[[1., 1.], |
| [1., 1.]], |
| [[1., 1.], |
| [1., 1.]], |
| [[1., 1.], |
| [1., 1.]]]) |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def irfft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Computes the inverse of `rfft2` |
| |
| Parameters |
| ---------- |
| x : array_like |
| The input array |
| s : sequence of ints, optional |
| Shape of the real output to the inverse FFT. |
| axes : sequence of ints, optional |
| The axes over which to compute the inverse fft. |
| Default is the last two axes. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The result of the inverse real 2-D FFT. |
| |
| See Also |
| -------- |
| rfft2 : The 2-D FFT of real input. |
| irfft : The inverse of the 1-D FFT of real input. |
| irfftn : The inverse of the N-D FFT of real input. |
| |
| Notes |
| ----- |
| This is really `irfftn` with different defaults. |
| For more details see `irfftn`. |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def hfftn(x, s=None, axes=None, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the N-D FFT of Hermitian symmetric complex input, i.e., a |
| signal with a real spectrum. |
| |
| This function computes the N-D discrete Fourier Transform for a |
| Hermitian symmetric complex input over any number of axes in an |
| M-D array by means of the Fast Fourier Transform (FFT). In other |
| words, ``ihfftn(hfftn(x, s)) == x`` to within numerical accuracy. (``s`` |
| here is ``x.shape`` with ``s[-1] = x.shape[-1] * 2 - 1``, this is necessary |
| for the same reason ``x.shape`` would be necessary for `irfft`.) |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array. |
| s : sequence of ints, optional |
| Shape (length of each transformed axis) of the output |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). `s` is also the |
| number of input points used along this axis, except for the last axis, |
| where ``s[-1]//2+1`` points of the input are used. |
| Along any axis, if the shape indicated by `s` is smaller than that of |
| the input, the input is cropped. If it is larger, the input is padded |
| with zeros. If `s` is not given, the shape of the input along the axes |
| specified by axes is used. Except for the last axis which is taken to be |
| ``2*(m-1)`` where ``m`` is the length of the input along that axis. |
| axes : sequence of ints, optional |
| Axes over which to compute the inverse FFT. If not given, the last |
| `len(s)` axes are used, or all axes if `s` is also not specified. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or by a combination of `s` or `x`, |
| as explained in the parameters section above. |
| The length of each transformed axis is as given by the corresponding |
| element of `s`, or the length of the input in every axis except for the |
| last one if `s` is not given. In the final transformed axis the length |
| of the output when `s` is not given is ``2*(m-1)`` where ``m`` is the |
| length of the final transformed axis of the input. To get an odd |
| number of output points in the final axis, `s` must be specified. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| ihfftn : The inverse N-D FFT with real spectrum. Inverse of `hfftn`. |
| fft : The 1-D FFT, with definitions and conventions used. |
| rfft : Forward FFT of real input. |
| |
| Notes |
| ----- |
| For a 1-D signal ``x`` to have a real spectrum, it must satisfy |
| the Hermitian property:: |
| |
| x[i] == np.conj(x[-i]) for all i |
| |
| This generalizes into higher dimensions by reflecting over each axis in |
| turn:: |
| |
| x[i, j, k, ...] == np.conj(x[-i, -j, -k, ...]) for all i, j, k, ... |
| |
| This should not be confused with a Hermitian matrix, for which the |
| transpose is its own conjugate:: |
| |
| x[i, j] == np.conj(x[j, i]) for all i, j |
| |
| |
| The default value of `s` assumes an even output length in the final |
| transformation axis. When performing the final complex to real |
| transformation, the Hermitian symmetry requires that the last imaginary |
| component along that axis must be 0 and so it is ignored. To avoid losing |
| information, the correct length of the real input *must* be given. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.ones((3, 2, 2)) |
| >>> scipy.fft.hfftn(x) |
| array([[[12., 0.], |
| [ 0., 0.]], |
| [[ 0., 0.], |
| [ 0., 0.]], |
| [[ 0., 0.], |
| [ 0., 0.]]]) |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def hfft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 2-D FFT of a Hermitian complex array. |
| |
| Parameters |
| ---------- |
| x : array |
| Input array, taken to be Hermitian complex. |
| s : sequence of ints, optional |
| Shape of the real output. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See `fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The real result of the 2-D Hermitian complex real FFT. |
| |
| See Also |
| -------- |
| hfftn : Compute the N-D discrete Fourier Transform for Hermitian |
| complex input. |
| |
| Notes |
| ----- |
| This is really just `hfftn` with different default behavior. |
| For more details see `hfftn`. |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def ihfftn(x, s=None, axes=None, norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the N-D inverse discrete Fourier Transform for a real |
| spectrum. |
| |
| This function computes the N-D inverse discrete Fourier Transform |
| over any number of axes in an M-D real array by means of the Fast |
| Fourier Transform (FFT). By default, all axes are transformed, with the |
| real transform performed over the last axis, while the remaining transforms |
| are complex. |
| |
| Parameters |
| ---------- |
| x : array_like |
| Input array, taken to be real. |
| s : sequence of ints, optional |
| Shape (length along each transformed axis) to use from the input. |
| (``s[0]`` refers to axis 0, ``s[1]`` to axis 1, etc.). |
| Along any axis, if the given shape is smaller than that of the input, |
| the input is cropped. If it is larger, the input is padded with zeros. |
| if `s` is not given, the shape of the input along the axes specified |
| by `axes` is used. |
| axes : sequence of ints, optional |
| Axes over which to compute the FFT. If not given, the last ``len(s)`` |
| axes are used, or all axes if `s` is also not specified. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : complex ndarray |
| The truncated or zero-padded input, transformed along the axes |
| indicated by `axes`, or by a combination of `s` and `x`, |
| as explained in the parameters section above. |
| The length of the last axis transformed will be ``s[-1]//2+1``, |
| while the remaining transformed axes will have lengths according to |
| `s`, or unchanged from the input. |
| |
| Raises |
| ------ |
| ValueError |
| If `s` and `axes` have different length. |
| IndexError |
| If an element of `axes` is larger than the number of axes of `x`. |
| |
| See Also |
| -------- |
| hfftn : The forward N-D FFT of Hermitian input. |
| hfft : The 1-D FFT of Hermitian input. |
| fft : The 1-D FFT, with definitions and conventions used. |
| fftn : The N-D FFT. |
| hfft2 : The 2-D FFT of Hermitian input. |
| |
| Notes |
| ----- |
| The transform for real input is performed over the last transformation |
| axis, as by `ihfft`, then the transform over the remaining axes is |
| performed as by `ifftn`. The order of the output is the positive part of |
| the Hermitian output signal, in the same format as `rfft`. |
| |
| Examples |
| -------- |
| >>> import scipy.fft |
| >>> import numpy as np |
| >>> x = np.ones((2, 2, 2)) |
| >>> scipy.fft.ihfftn(x) |
| array([[[1.+0.j, 0.+0.j], # may vary |
| [0.+0.j, 0.+0.j]], |
| [[0.+0.j, 0.+0.j], |
| [0.+0.j, 0.+0.j]]]) |
| >>> scipy.fft.ihfftn(x, axes=(2, 0)) |
| array([[[1.+0.j, 0.+0.j], # may vary |
| [1.+0.j, 0.+0.j]], |
| [[0.+0.j, 0.+0.j], |
| [0.+0.j, 0.+0.j]]]) |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|
|
|
| @_dispatch |
| def ihfft2(x, s=None, axes=(-2, -1), norm=None, overwrite_x=False, workers=None, *, |
| plan=None): |
| """ |
| Compute the 2-D inverse FFT of a real spectrum. |
| |
| Parameters |
| ---------- |
| x : array_like |
| The input array |
| s : sequence of ints, optional |
| Shape of the real input to the inverse FFT. |
| axes : sequence of ints, optional |
| The axes over which to compute the inverse fft. |
| Default is the last two axes. |
| norm : {"backward", "ortho", "forward"}, optional |
| Normalization mode (see `fft`). Default is "backward". |
| overwrite_x : bool, optional |
| If True, the contents of `x` can be destroyed; the default is False. |
| See :func:`fft` for more details. |
| workers : int, optional |
| Maximum number of workers to use for parallel computation. If negative, |
| the value wraps around from ``os.cpu_count()``. |
| See :func:`~scipy.fft.fft` for more details. |
| plan : object, optional |
| This argument is reserved for passing in a precomputed plan provided |
| by downstream FFT vendors. It is currently not used in SciPy. |
| |
| .. versionadded:: 1.5.0 |
| |
| Returns |
| ------- |
| out : ndarray |
| The result of the inverse real 2-D FFT. |
| |
| See Also |
| -------- |
| ihfftn : Compute the inverse of the N-D FFT of Hermitian input. |
| |
| Notes |
| ----- |
| This is really `ihfftn` with different defaults. |
| For more details see `ihfftn`. |
| |
| """ |
| return (Dispatchable(x, np.ndarray),) |
|
|