2 回答
TA贡献1847条经验 获得超11个赞
要进行 O(1) 更新过程,您可以使用双数组缓冲区自行完成:
size=4
buffersize=2*size
buffer=np.zeros(buffersize+1,int) # one more room for keep trace on beginning of buffer.
sensor=iter(range(1,10**5)) # emulation
def update():
i=buffer[buffersize] # to avoid global variable i
buffer[i]=buffer[i+size]=next(sensor) # double copy.
buffer[buffersize]=i=(i+1)%size
print(i,buffer[:buffersize],buffer[i:i+size])
# In real life : curve1.SetData(buffer[i:i+size])
由于buffer[i:i+size]只是一个视图,因此不会花时间更新curve1。
跑步 :
>>> for k in range(6): update()
1 [1 0 0 0 1 0 0 0] [0 0 0 1]
2 [1 2 0 0 1 2 0 0] [0 0 1 2]
3 [1 2 3 0 1 2 3 0] [0 1 2 3]
0 [1 2 3 4 1 2 3 4] [1 2 3 4]
1 [5 2 3 4 5 2 3 4] [2 3 4 5]
2 [5 6 3 4 5 6 3 4] [3 4 5 6]
....
TA贡献1860条经验 获得超9个赞
添加回答
举报