具有恒定时间访问的高效循环缓冲区

问题描述 投票:0回答:2

在用 python 编写的机器学习项目中,我需要一个像

collections.deque
这样的高效循环缓冲区,但可以恒定时间访问像
numpy.array
这样的任何元素。问题是双端队列显然是一个链表。在 python 库中是否有一些我不知道的用于此用例的有效且容易实现的东西?

我想,我可以简单地在我的用例中使用一个修改后的固定大小

numpy.array
,并带有移动的 0 索引,但这是为了我的 python 文化,因为这不是我第一次需要这样的东西。

python buffer constant-time
2个回答
0
投票

collections.deque
不完全是一个链表。这是一个大小为 64 的数组的双向链表。我想说,当您想要随机访问和在两端附加而不需要不断重新分配时,这是一个相当不错的选择。

但是,如果您已经完成了正确的性能分析,并且循环缓冲区确实是您的瓶颈,那么您可以用纯 C 实现该缓冲区以提高性能,并将绑定添加到 python。


0
投票

https://pypi.org/project/numpy-ringbuffer/

numpy_ringbuffer 模块使用由 NumPy 数组支持的缓冲区。它应该满足您的效率要求。

© www.soinside.com 2019 - 2024. All rights reserved.