我试图找到正弦曲线的最大值并在子图中显示它。并尝试像动画一样更新它。但是最大值的子图给出了所有零值。当我打印数组时,它不是零。我认为它不是更新y值。我无法弄清楚原因。任何帮助将不胜感激。
我会把我的代码放在可执行文件中:
from pylab import *
import time
ion()
fs = 1e6
Ts = 1/fs
SNR=10
sinfreq=2*pi*1e5
pack= 512
t = Ts*arange(0,pack)
f = fs*(arange(0,pack)-pack/2)/pack
max_y = zeros (len(t))
y=sin(sinfreq*t)
y=y+randn(size(y))/sqrt(10^(SNR/10)*2)
subplot(211)
line1, = plot(y)
subplot(212)
line2, = plot(max_y)
for i1 in arange(1,1000):
y=sin(sinfreq*t)
y=y+randn(size(y))/sqrt(10^(SNR/10)*2)
line1.set_ydata(y)
mk=0
for mk in range(0,len(y)):
if y[mk] > max_y[mk]:
max_y[mk] = y[mk]
print max_y
line2.set_ydata(max_y)
draw()
waitforbuttonpress(timeout=0.5)
答案 0 :(得分:0)
你忘记了第二个for循环中的缩进。 这实际上应该给你一个IndentationError,所以我不明白你怎么能说程序是可执行的(事实上,我编辑了你的条目以删除左边的“输入代码在这里”声明;如果你已经检查和复制 - 你的参赛作品,你可能会发现两个错误。)
但是,你确定你不想简单地
max_y[:] = max(y)
而不是for循环?
答案 1 :(得分:0)
好的,我偶然找到了解决方案,我不知道原因,但我先更新我的max_y情节,然后再进行真正的更新,然后情节显示我的更改。除此之外,它没有显示出来。我尝试使用不同的for循环,他们正在使用一个更新进行绘制,但对于我的循环,它想要更新两次。
我还添加了set_ylim以更好地了解限制。我把星星放到我改变的地方。我也把新代码。我希望它能帮助那些有同样问题的人。
from pylab import *
import time
ion()
fs = 1e6
Ts = 1/fs
SNR=10
sinfreq=2*pi*1e5
pack= 512
t = Ts*arange(0,pack)
f = fs*(arange(0,pack)-pack/2)/pack
max_y = zeros (len(t))
y=sin(sinfreq*t)
y=y+randn(size(y))/sqrt(10^(SNR/10)*2)
subplot(211)
line1, = plot(y)
sub2=subplot(212) #****
line2, = plot(max_y)
for i1 in arange(1,1000):
y=sin(sinfreq*t)
y=y+randn(size(y))/sqrt(10^(SNR/10)*2)
line1.set_ydata(y)
mk=0
for mk in range(0,len(y)):
if y[mk] > max_y[mk]:
max_y[mk] = y[mk]
#print max_y
line2.set_ydata(zeros(len(max_y)))#****
line2.set_ydata(max_y)
sub2.set_ylim(min(max_y),max(max_y)) #****
draw()
waitforbuttonpress(timeout=0.5)