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 版本中新增。
參考文獻
[1]“DFT matrix”, 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])