我正在尝试为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]))
答案 0 :(得分:3)
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])
答案 1 :(得分:1)
该函数的原始公式中的其他地方有一个错误,我对它进行了些微修改以使其向量化,并将其与官方的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
在对代码执行完整性检查时,请始终对照已知解决方案进行检查!它将为您节省很多时间:)