数组傅里叶变换

Fourier Transform with array

我正在尝试为 Python 中的数组定义傅里叶变换。 The formula I'm trying to use.

但是,输出始终是一个空数组。你能帮我解决我的错误吗?

import numpy as np
def TF(T):
    N = len(T)
    Tr = np.array([])
    for k in range(0,N-1):
        Tl = 0
        for l in range(0,N-1):
            Tk += (T[l])*np.exp((-2j*np.pi*k*l)/N)
        np.append(Tr,Tk)
    print('Tr =',Tr)

TF(np.array([2,3,5,7,2,9]))
  1. 您需要存储结果。np.append 就地工作。
  2. 您的代码需要更改

使用这个:

import numpy as np

def TF(T):
    N = len(T)
    results = []
    for k in range(N): # this goes from 0 to N-1
        Tk = 0 # Tk here
        for l in range(N): # this goes from 0 to N-1
            Tk += (T[l])*np.exp((-2j*np.pi*k*l)/N)
        results.append(Tk) # store the result
    return np.array(results) # return the results

T = np.array([2, 3, 5, 7, 2, 9])

TF(T)
array([ 28. +0.00000000e+00j,  -2.5+2.59807621e+00j,
        -0.5+7.79422863e+00j, -10. -2.22329102e-14j,
        -0.5-7.79422863e+00j,  -2.5-2.59807621e+00j])

你原来的函数公式在其他地方有错误,我稍微修改了它以进行矢量化并将其与官方 numpy FFT 函数进行比较:

def TF(T):
    N = len(T)
    idx = np.arange(N)
    Tr = np.empty(shape=T.shape, dtype=np.complex)
    for k in idx:
        Tr[k] = np.sum(T*np.exp((-2j*np.pi*k*idx)/N))

    return Tr

np.fft.fft()相比:

x = np.array([2,3,5,7,2,9])

custom_fft = TF(x)
numpy_fft = np.fft.fft(x)

np.allclose(custom_fft, numpy_fft)
>>> True

在对您的代码执行健全性检查时,始终对照已知解决方案进行检查!它将为您节省很多次:)