Эффективный кольцевой буфер с постоянным доступом

В проекте машинного обучения, написанном на Python, мне нужен эффективный кольцевой буфер, например collections.deque но с постоянным доступом к любому элементу, например numpy.array. Проблема в том, что deque, по-видимому, является связанным списком. Есть ли что-то эффективное, легко реализуемое в библиотеке Python, о котором я не знаю для этого варианта использования, пожалуйста?

Я мог бы просто модифицировать фиксированный размер numpy.array с движущимся индексом 0 в моем варианте использования, я думаю, но это для моей культуры Python, так как это не первый раз, когда мне нужно что-то подобное.

2 ответа

The numpy_ringbufferМодуль по адресу https://pypi.org/project/numpy-ringbuffer/ использует буферы, поддерживаемые массивом NumPy. Он должен удовлетворять вашим требованиям к эффективности.

collections.dequeне совсем связанный список. Это двусвязный список массивов размером 64. Я бы сказал, что это довольно приличный выбор, если вам нужен как произвольный доступ, так и добавление на обоих концах без постоянного перераспределения.

Однако, если вы выполнили правильное профилирование производительности и этот кольцевой буфер действительно является вашим узким местом, вы можете реализовать буфер на простом C для повышения производительности и добавить привязки к python.

Другие вопросы по тегам