【发布时间】:2014-10-30 05:07:48
【问题描述】:
我正在开发一个实时应用程序。为此,我需要每秒存储大约 20 个数组。每个数组由 n 个点组成,它们具有各自的 x 和 y 坐标(z 将来也可能跟随)。
我想出的是某种环形缓冲区,它采用总数组的长度(顺便说一句,它是视频的帧)和点的数量及其坐标(这不会在一次执行,但对于后续执行是可变的)。
我的缓冲区初始化为一个用零填充的 numpy 数组:np.zeros((lengthOfSlices,numberOfTrackedPoints))
但是这似乎是有问题的,因为我一次将整个 Points for a Slice 写入数组,而不是一个接一个。这意味着我无法广播数组,因为形状不正确。
有没有一种 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]
【问题讨论】:
标签: python arrays python-2.7 numpy