scipy.linalg.dft

scipy.linalg.dft(n, scale=None)[源代码]

离散傅立叶变换矩阵。

创建计算序列的离散傅立叶变换的矩阵 [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 新版功能.

参考文献

1

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

示例

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