计算傅里叶变换,但总是得到类型错误



我有一个函数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 个错误:

  1. 导入所有相关模块:缺少from numpy import linspace
  2. 在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))) .

相关内容

最新更新