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

时间:2018-04-07 10:08:51

标签: python arrays python-3.x numpy python-3.6

我有一个函数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'

1 个答案:

答案 0 :(得分:2)

您的代码中有2个错误:

  1. 导入所有相关模块:from numpy import linspace缺失。
  2. 在Python 3.x中,map返回迭代器而不是列表。您需要使用y = list(map(f,N))
  3. 解决这些问题的以下代码成功运行:

    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)))