dmy*_*tro 6 python ctypes numpy circular-buffer
我正在开发一个客户端,它将通过tcp接收[EEG]数据并将其写入环形缓冲区.我认为将缓冲区作为ctypes或numpy数组非常方便,因为它可以为这样的缓冲区的任何位置创建一个numpy"视图",并且可以读取/写入/处理数据而无需任何复制操作.或者一般来说这是一个坏主意?
但是,我没有看到如何以这种方式实现固定大小的循环缓冲区.假设我创建了一个在内存中连续的缓冲区对象.达到缓冲区末尾时写入数据的最佳方法是什么?
一种可能的方法是在写指针到达缓冲区数组的末尾时开始覆盖(已经过时的)字节.然而,在边界附近,在这种情况下,某些块(用于处理)的numpy视图无法创建(或者可以吗?),因为其中一些仍然可以位于缓冲区数组的末尾,而另一个已经在它的开始.我读过它是不可能创建这样的圆形切片.怎么解决这个?
UPD:谢谢大家的答案.如果有人也面临同样的问题,这是我得到的最终代码.
如果您需要一个 N 字节的窗口,请将缓冲区设为 2*N 字节并将所有输入写入两个位置:i % N和i % N + N,其中i是字节计数器。这样你总是在缓冲区中有 N 个连续的字节。
data = 'Data to buffer'
N = 4
buf = 2*N*['\00']
for i,c in enumerate(data):
j = i % N
buf[j] = c
buf[j+N] = c
if i >= N-1:
print ''.join(buf[j+1:j+N+1])
Run Code Online (Sandbox Code Playgroud)
印刷
Data
ata
ta t
a to
to
to b
o bu
buf
buff
uffe
ffer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4091 次 |
| 最近记录: |