scipy.linalg.

dft#

scipy.linalg.dft(n, scale=None)[source]#

離散傅立葉轉換矩陣。

建立計算序列 [1] 的離散傅立葉轉換的矩陣。用於生成矩陣的第 n 個單位根是 exp(-2*pi*i/n),其中 i = sqrt(-1)。

參數:
n整數

要建立的矩陣大小。

scale字串,選填

必須為 None、‘sqrtn’ 或 ‘n’。如果 scale 為 ‘sqrtn’,矩陣會除以 sqrt(n)。如果 scale 為 ‘n’,矩陣會除以 n。如果 scale 為 None (預設值),則矩陣不會正規化,且傳回值就只是單位根的 Vandermonde 矩陣。

回傳:
m(n, n) ndarray

DFT 矩陣。

註解

scale 為 None 時,將向量乘以 dft 傳回的矩陣在數學上等同於 (但效率遠低於) scipy.fft.fft 執行的計算。

在 0.14.0 版本中新增。

參考文獻

範例

>>> 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 @ xfft(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])