scipy.linalg.

dft#

scipy.linalg.dft(n, scale=None)[источник]#

Матрица дискретного преобразования Фурье.

Создать матрицу, вычисляющую дискретное преобразование Фурье последовательности [1]. n-й первообразный корень из единицы, используемый для генерации матрицы, равен exp(-2*pi*i/n), где i = sqrt(-1).

Параметры:
nint

Размер создаваемой матрицы.

scalestr, optional

Должно быть None, ‘sqrtn’ или ‘n’. Если scale равно 'sqrtn', матрица делится на sqrt(n). Если scale если ‘n’, матрица делится на n. Если scale если None (по умолчанию), матрица не нормируется, и возвращаемое значение — просто матрица Вандермонда корней из единицы.

Возвращает:
m(n, n) ndarray

Матрица ДПФ.

Примечания

Когда scale равно None, умножение вектора на матрицу, возвращенную dft математически эквивалентно (но гораздо менее эффективно, чем) вычисление, выполняемое scipy.fft.fft.

Добавлено в версии 0.14.0.

Ссылки

[1]

“Матрица DFT”, https://en.wikipedia.org/wiki/DFT_matrix

Примеры

>>> 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])

Проверить, что m @ x то же самое, что 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])