numpy 和 ndarray 可以做你描述的事情,不需要任何额外的类:
- 要将数组推送到缓冲区,请将它们连接到数组
- 要从缓冲区中获取元素,请访问切片(然后删除它,如果你想要的话)
这对你来说是否足够好取决于你对“好的缓冲区”的期望......
它可以这样工作:
buffer = np.array([])
# I assume the arrays are one-dimensional.
buffer = np.concatenate([buffer, in_array_1])
buffer = np.concatenate([buffer, in_array_2])
buffer = np.concatenate([buffer, in_array_3])
out_array = buffer[:num_of_elements_to_get]
buffer = np.delete(buffer, slice(0, num_of_elements_to_get)) # remove elements (optional)
如果你想隐藏细节,你可以创建一个在属性中存储buffer的类,并实现push和pop或get方法。不要忘记在 getter (num_of_elements_to_get <= buffer.size) 中检查错误。如果它只返回元素,我会调用方法get,如果它删除元素,我会调用pop。
正如 hpaulj 指出的,可以在一个函数调用中组合多个串联:
buffer = np.concatenate([buffer, in_array_1, in_array_2, in_array_3])
这会减少缓冲区的重新分配。但是,如果分配是一个问题,最好投入更多精力并实现一个环形缓冲区。
作为附加说明,一个setter方法可以设计成接受多个数组:
def push(self, *args):
self.buffer = np.concatenate([self.buffer] + args)