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