我正在开发一个实时应用程序。为此,我需要每秒存储大约20个数组。每个数组由n个点组成,每个点都有各自的x和y坐标(将来也可能是z坐标)。
我想出的是某种环形缓冲区,它接受所有数组的长度(它是视频的帧)。以及点的数量和它们的坐标(这在一次执行中不会改变,但在随后的执行中是可变的)。
我的缓冲区使用一个填充了零的数值数组进行初始化: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]发布于 2014-09-05 19:26:55
您需要根据帧的长度重塑阵列。
简单的例子:
>>> 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.reshape(self.data, (lengthOfAFrame, 20))的东西
编辑:显然重塑不是你的(唯一?)问题,您可以在collections.deque中检查循环缓冲区(source and example)的python实现
https://stackoverflow.com/questions/25682600
复制相似问题