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

Python 计算傅里叶变换,但总是得到一个类型错误,python,arrays,python-3.x,numpy,python-3.6,Python,Arrays,Python 3.x,Numpy,Python 3.6,我有一个函数f(t),表示振幅为1、频率为1 Hz的方波,我被要求编写一个程序,c创建一个包含1000个元素的数组,其中包含来自所述方波单个周期的1000个等距样本,并计算数组的傅里叶变换。所以我写了这段代码,但总是出错。有人能帮我修一下吗 from math import trunc, linspace from numpy.fft import rfft, irfft from pylab import plot, show def f(t): if trunc(2*t) %

我有一个函数f(t),表示振幅为1、频率为1 Hz的方波,我被要求编写一个程序,c创建一个包含1000个元素的数组,其中包含来自所述方波单个周期的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个错误:

  • 导入所有相关模块:
    从numpy导入linspace
    缺失
  • 在Python3.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)))

    您需要提供完整的错误…您真正想要的是什么?如果这是完整的代码,错误是
    name错误:未定义名称“linspace”
    。问题是什么以及如何解决,这难道不是显而易见的吗?(将numpy import linspace的
    行添加到顶部附近。)当然,当您修复该错误时,会弹出另一行。阅读错误消息并对其采取行动。您有什么特别的地方不明白吗?很抱歉,我在这里输入问题时忘了包含linspace。弹出的错误是TypeError:float()参数必须是字符串或数字,而不是“map”,现在您得到了另一个错误。函数
    linspace
    不在尝试导入它的
    math
    模块中,而是在
    numpy
    模块中。非常感谢您的帮助!