Skip to main content
`Ctrl`+`K`

# scipy.linalg.dft

scipy.linalg.dft(n, scale=None)

  Discrete Fourier transform matrix.

  Create the matrix that computes the discrete Fourier transform of a sequence [1]. The nth primitive root of unity used to generate the matrix is exp(-2*pi*i/n), where i = sqrt(-1).

  Parameters:
    n int

      Size the matrix to create.

    scale str, optional

      Must be None, ‘sqrtn’, or ‘n’. If scale is ‘sqrtn’, the matrix is divided by sqrt(n). If scale is ‘n’, the matrix is divided by n. If scale is None (the default), the matrix is not normalized, and the return value is simply the Vandermonde matrix of the roots of unity.

  Returns:
    m(n, n) ndarray

      The DFT matrix.

  Notes

  When scale is None, multiplying a vector by the matrix returned by `dft` is mathematically equivalent to (but much less efficient than) the calculation performed by `scipy.fft.fft`.

  New in version 0.14.0.

  References

  [1]

  “DFT matrix”, https://en.wikipedia.org/wiki/DFT_matrix

  Examples

      >>> import numpy as np
      >>> from scipy.linalg import dft
      >>> np.set_printoptions(precision=2, suppress=True)  # for compact output
      >>> m = dft(5)
      >>> m
      array([[ 1.  +0.j  ,  1.  +0.j  ,  1.  +0.j  ,  1.  +0.j  ,  1.  +0.j  ],
             [ 1.  +0.j  ,  0.31-0.95j, -0.81-0.59j, -0.81+0.59j,  0.31+0.95j],
             [ 1.  +0.j  , -0.81-0.59j,  0.31+0.95j,  0.31-0.95j, -0.81+0.59j],
             [ 1.  +0.j  , -0.81+0.59j,  0.31-0.95j,  0.31+0.95j, -0.81-0.59j],
             [ 1.  +0.j  ,  0.31+0.95j, -0.81+0.59j, -0.81-0.59j,  0.31-0.95j]])
      >>> x = np.array([1, 2, 3, 0, 3])
      >>> m @ x  # Compute the DFT of x
      array([ 9.  +0.j  ,  0.12-0.81j, -2.12+3.44j, -2.12-3.44j,  0.12+0.81j])

  Verify that `m @ x` is the same as `fft(x)`.

      >>> from scipy.fft import fft
      >>> fft(x)     # Same result as m @ x
      array([ 9.  +0.j  ,  0.12-0.81j, -2.12+3.44j, -2.12-3.44j,  0.12+0.81j])