Python 阵列傅里叶变换

Python 阵列傅里叶变换,python,arrays,fft,Python,Arrays,Fft,我正试图用Python为数组定义傅里叶变换 但是,输出总是一个空数组。你能帮我纠正我的错误吗 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.a

我正试图用Python为数组定义傅里叶变换

但是,输出总是一个空数组。你能帮我纠正我的错误吗

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]))
  • 您需要存储结果。
    np.append
    工作正常。
  • 您的代码需要更改
  • 使用以下命令:

    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=长度(T)
    idx=np.arange(N)
    Tr=np.empty(shape=T.shape,dtype=np.complex)
    对于idx中的k:
    Tr[k]=np.sum(T*np.exp(-2j*np.pi*k*idx)/N)
    返回Tr
    
    np.fft.fft()相比:

    x=np.数组([2,3,5,7,2,9])
    自定义fft=TF(x)
    numpy_fft=np.fft.fft(x)
    np.allclose(自定义快速傅立叶变换,numpy快速傅立叶变换)
    >>>真的
    

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

    发布时,它将始终返回
    None
    ,您需要在函数末尾添加
    return
    语句。它还引发了一个异常:
    UnboundLocalError:赋值前引用的局部变量“Tk”
    打印显示一个空数组,因此返回语句不是完整的解决方案。通常,在使用NumPy时应避免循环。结果是否与输入的维度不同?从公式中,给出了变换的$k^{th}$分量,函数在范围上迭代$k$(0,N-1]真的没有矢量化的解决方案吗?我们陷入了循环和追加的困境?有多种方法可以做到这一点,但OP没有要求优化版本。相反,OP需要正确的实现。谢谢Alexander此解决方案不正确!最终答案与以前实现的FFT函数不一致。Ed我是在发现OPs代码中的第二个错误后发现的。谢谢你的回答!我的主题的目标是只使用np.exp和np.pi构建FFT。这就是我没有使用任何其他np函数的原因。