Pythonで2次元DFTのDFT行列を取得する最も簡単な方法は何ですか? numpy.fftにそのような関数が見つかりませんでした。ありがとう!
			
			19528 次
		
7 に答える
            17        
        
		
最も簡単でおそらく最速の方法は、SciPy の fft を使用することです。
import scipy as sp
def dftmtx(N):
    return sp.fft(sp.eye(N))
もっと速い方法 (もっと複雑かもしれません) をご存知でしたら、ご意見をいただければ幸いです。
主な質問との関連性を高めるために、numpy を使用することもできます。
import numpy as np
dftmtx = np.fft.fft(np.eye(N))
私がそれらの両方をベンチマークしたとき、scipy の方がわずかに高速だったという印象がありますが、完全には実行していません。
Python での FFT 実装に関する非常に優れたソースは次 のとおりです: http://nbviewer.ipython.org/url/jakevdp.github.io/downloads/notebooks/UnderstandingTheFFT.ipynb時にはシンプルさも伴います。
于 2014-10-29T18:04:43.140   に答える
    
    
            14        
        
		
私はこれが組み込まれているとは思わない.しかし、直接計算は簡単です:
import numpy as np
def DFT_matrix(N):
    i, j = np.meshgrid(np.arange(N), np.arange(N))
    omega = np.exp( - 2 * pi * 1J / N )
    W = np.power( omega, i * j ) / sqrt(N)
    return W
EDIT 2D FFT マトリックスの場合、次を使用できます。
x = np.zeros(N, N) # x is any input data with those dimensions
W = DFT_matrix(N)
dft_of_x = W.dot(x).dot(W)
于 2013-11-02T06:38:13.180   に答える
    
    
            2        
        
		
@アレックス| は基本的に正しいです。2 次元 DFT に使用したバージョンをここに追加します。
def DFT_matrix_2d(N):
    i, j = np.meshgrid(np.arange(N), np.arange(N))
    A=np.multiply.outer(i.flatten(), i.flatten())
    B=np.multiply.outer(j.flatten(), j.flatten())
    omega = np.exp(-2*np.pi*1J/N)
    W = np.power(omega, A+B)/N
    return W
于 2013-11-02T22:05:15.780   に答える