Python 为方波函数的值创建数组

Python 为方波函数的值创建数组,python,arrays,fft,Python,Arrays,Fft,我有一个如下所示的函数 f(t) = 1 : if 2t rounded down to the next lowest integer is even f(t) = -1 : if 2t rounded down to the next lowest integer is odd 我试图最终对函数进行傅里叶变换,但首先我需要编写一个程序,创建一个由N=1000个元素组成的数组,其中包含1000个等间距样本,这些样本来自该函数的单周期,即方波 如何创建此数组?假设您有一个返回样本值的方法

我有一个如下所示的函数

f(t) = 1 : if 2t rounded down to the next lowest integer is even 

f(t) = -1 : if 2t rounded down to the next lowest integer is odd 
我试图最终对函数进行傅里叶变换,但首先我需要编写一个程序,创建一个由N=1000个元素组成的数组,其中包含1000个等间距样本,这些样本来自该函数的单周期,即方波


如何创建此数组?

假设您有一个返回样本值的方法:

import math    

def f(t):
"""
f(t) = 1 if ⌊2t⌋ is even, −1 if ⌊2t⌋ is odd
"""
    if math.floor(2 * t) % 2 == 0:
        return 1
    else:
        return -1
生成阵列的最简单方法是:

a = [f(n) for n in xrange(1000)]

注意:这假设Python2.x,如果Python3.x可以这样定义函数,请使用range

def f(t):
    return 1 if int(2 * t) % 2 == 0 else -1
如果您使用的是python2.x,则可以使用map创建列表

N = 1000
sample = map(f, xrange(N)) # Or alternatively map(lambda n: f(n), xrange(N))

当您在一个周期内询问平方函数的值时,首先必须为时间样本创建值。从
t=0开始
您提到的函数有一个1的周期,在
t=1
之后,函数会自动重复

要创建0和1之间等间距值的序列,有几种备选方案,但有一种是严格的。第一个参数是循环的开始时间,第二个参数是循环的结束时间,第三个参数是采样数(等间距)。通过使用此选项,您可以创建
t\u示例

之后,只需将存储在
t\u samples
中的值输入方波函数(
square\u func

请参见以下示例,了解如何使用它:

import numpy

def square_func(t):
    if int(2*t)%2 == 0:
        return 1
    else:
        return -1

t_samples = numpy.linspace(0.0,1.0,1000)

samples = [square_func(i) for i in t_samples]
变量
samples
存储一个包含所需值的列表(其中一半为'1s',另一半为'-1s',我们指的是一个周期)。使用此代码生成的函数的循环如下图所示:


我最后是这样回答的

F=zeros(1000)
F[0:500]=1
F[500:1000]=-1

对不起,我不理解函数部分,你能更精确一点吗?f(t)=1如果⌊2t⌋ 甚至,−1如果⌊2t⌋ 很奇怪,你是说你想要1000-1和1的交替?这甚至都不是正确的语法。。。混淆?OP要求从why not
map(f,xrange(N))
?@PadraicCunningham,我想说得详细一点,但我会添加一条注释:)嗯,这段代码只返回“1s”而不返回“-1s”为什么?darren你们在用整数以外的任何东西进行测试吗?根据定义,一个整数的两倍总是偶数。你需要像t=1.5这样的东西来产生-1。如果我设置一个arange,然后设置F=0(1000),那么F[0:500]=1和F[500:1000]=1呢?这是这个方法的完整原型:xrange(start,stop[,step])嗯,这只是一个周期,周期非常长。如果你这样做,你必须导入numpy。如果要避免这种情况,一个更简单的解决方案是将第一行替换为
F=[0]*1000