Python n维向量的环形缓冲区

Python n维向量的环形缓冲区,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我正在开发一个实时应用程序。为此,我需要每秒存储大约20个阵列。每个阵列由n个点组成,这些点具有各自的x和y坐标(将来也可能是z坐标) 我提出的是一种环形缓冲区,它采用总数组的长度(视频btw的帧)和点的数量及其坐标(在一次执行中不会改变,但在随后的执行中是可变的) 我的缓冲区初始化带有一个用零填充的numpy数组:np.zeros((lengthOfSlices,numberOfTrackedPoints)) 然而,这似乎是有问题的,因为我一次将一个切片的所有点写入数组,而不是一个接一个地写入

我正在开发一个实时应用程序。为此,我需要每秒存储大约20个阵列。每个阵列由n个点组成,这些点具有各自的x和y坐标(将来也可能是z坐标)

我提出的是一种环形缓冲区,它采用总数组的长度(视频btw的帧)和点的数量及其坐标(在一次执行中不会改变,但在随后的执行中是可变的)

我的缓冲区初始化带有一个用零填充的numpy数组:
np.zeros((lengthOfSlices,numberOfTrackedPoints))

然而,这似乎是有问题的,因为我一次将一个切片的所有点写入数组,而不是一个接一个地写入。这意味着我不能广播阵列,因为形状不正确

是否有一种numPythonic方法可以用零初始化数组,然后按矢量存储

下面您可以找到我现在拥有的:

class Buffer():
  def __init__(self, lengthOfSlices, numberOfTrackedPoints):
    self.data = np.zeros((lengthOfSlices,numberOfTrackedPoints))
    self.index = 0

  def extend(self, x):
    'adds array x to ring buffer'
    x_index = (self.index + np.arange(x.size)) % self.data.size
    self.data[x_index] = x
    self.index = x_index[-1] + 1

  def get(self):
    'returns the first-in-first-out data in the ring buffer'
    idx = (self.index + np.arange(self.data.size)) % self.data.size
    return self.data[idx]

您需要根据帧的长度重塑阵列的形状

简单的例子:

>>> import numpy as np
>>> A = np.zeros(100)
>>> B = np.reshape(A, (10,10))
>>> B[0]
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
所以这可能类似于
self.data=np.reforme(self.data,(lengthOfAFrame,20))

编辑:
显然,重塑不是你(唯一?)的问题,你可以检查一下循环缓冲区的python实现()

好的,假设我得到了一个像(128,2,2)这样的形状,用于128帧和2个跟踪点乘以x和y的视频。如何正确索引我的计算值?例如,对于一帧,我得到了类似result=[[236218],[267220]]的结果。我不能只索引“self.data[0]=result”,因为这样它只会填充数组,但会覆盖以索引器结尾的数据结构。您应该能够执行self.data[0]=result,除非我怀疑您的索引计算错误(添加整数和numpy数组),因此使用collections.deque可能更简单