scipy.linalg.
dft#
- scipy.linalg.dft(n, scale=None)[源代码][源代码]#
离散傅里叶变换矩阵。
创建计算序列离散傅里叶变换的矩阵 [1]。用于生成矩阵的第 n 个单位根是 exp(-2*pi*i/n),其中 i = sqrt(-1)。
- 参数:
- n整数
调整矩阵的大小以创建。
- 比例str, 可选
必须是 None、’sqrtn’ 或 ‘n’。如果 scale 是 ‘sqrtn’,矩阵将除以 sqrt(n)。如果 scale 是 ‘n’,矩阵将除以 n。如果 scale 是 None(默认值),矩阵将不会被归一化,返回值仅为单位根的范德蒙矩阵。
- 返回:
- m(n, n) ndarray
DFT 矩阵。
注释
当 scale 为 None 时,将一个向量乘以
dft
返回的矩阵在数学上等价于(但效率远低于)由scipy.fft.fft
执行的计算。Added in version 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])