我有一个函数f(t)代表一个幅度为1且频率为1 Hz的方波,我被要求编写程序,c 创建一个N = 1000个元素的数组,其中包含一千个等距的样本来自所述方波的单个周期并且计算阵列的傅立叶变换。所以我写了这段代码,但我总是收到错误。有人可以帮我解决这个问题。
from math import trunc, linspace
from numpy.fft import rfft, irfft
from pylab import plot, show
def f(t):
if trunc(2*t) % 2 == 0:
return 1
else:
return -1
N = linspace(0,1,1000)
y = map(f,N)
c = rfft(y)
plot(y)
我得到的错误是:
TypeError: float() argument must be a string or a number, not 'map'
答案 0 :(得分:2)
您的代码中有2个错误:
from numpy import linspace
缺失。map
返回迭代器而不是列表。您需要使用y = list(map(f,N))
。解决这些问题的以下代码成功运行:
from math import trunc
from numpy import linspace
from numpy.fft import rfft, irfft
from pylab import plot, show
def f(t):
if trunc(2*t) % 2 == 0:
return 1
else:
return -1
N = linspace(0,1,1000)
y = list(map(f,N))
c = rfft(y)
对于y
数组,您可以使用y = np.array(list(map(f,N)))
。