我有一个函数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'
代码中有 2 个错误:
- 导入所有相关模块:缺少
from numpy import linspace
。 - 在Python 3.x中,
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)))
.