数组傅里叶变换
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]))
- 您需要存储结果。
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 = 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
在对您的代码执行健全性检查时,始终对照已知解决方案进行检查!它将为您节省很多次:)
我正在尝试为 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]))
- 您需要存储结果。
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 = 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
在对您的代码执行健全性检查时,始终对照已知解决方案进行检查!它将为您节省很多次:)