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
。