我仍然可以在Python中找到自己的方式,所以这个问题可能非常基本:
我试图在python中生成一些余弦波,然后对其进行傅立叶变换。我写了以下代码:
from pylab import *
from numpy import *
x = linspace(-5,5,100)
t = linspace(0,2000,2001)
w1=cos(2*pi*3*t/2001)
w2=cos(2*pi*10*t/2001)
fourier=0
long(fourier)
Trace = w1+w2
for i in range(1,125,1):
fourier[i] = sum(cos(2*pi*i*t/2001)*Trace)
print fourier
f=linspace(1,125,125)
plot(f,fourier)
show()
因此,我不想做成一个频率一个频率的值,而是想做一个循环,使每个频率从1到125,并将输出存储在一个列表中,以便我可以绘制它们。
Python不喜欢这样,并给出一条消息:
fourier[i] = sum(cos(2*pi*i*t/2001)*Trace)
TypeError: 'int' object does not support item assignment
知道为什么吗?
python大神给出的解决方案
可能是您想要的:
fourier = []
您将其清除为整数,则需要将其清除为列表。
您的Fourior类型是整数,您需要将其作为列表,以便它可以支持索引分配
还从您的代码中删除long(fourier)
for i in range(1,126):
fourier[i] = sum(cos(2*pi*i*t/2001)*Trace)
这将使您的索引超出索引错误
正确的是:
for i in range(1,126): # you dont need last option as 1, because range step is one by default
fourier.append(sum(cos(2*pi*i*t/2001)*Trace))
OR
fourier.insert(i,sum(cos(2*pi*i*t/2001)*Trace))
使用列表理解更好,并且您需要将范围设置为126以匹配f
的尺寸以进行绘制:
fourier = [sum(cos(2*pi*i*t/2001)*Trace) for i in range(1,126)]