首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N维向量的环形缓冲区

N维向量的环形缓冲区
EN

Stack Overflow用户
提问于 2014-09-05 17:23:04
回答 1查看 480关注 0票数 1

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

我想出的是某种环形缓冲区,它接受所有数组的长度(它是视频的帧)。以及点的数量和它们的坐标(这在一次执行中不会改变,但在随后的执行中是可变的)。

我的缓冲区使用一个填充了零的数值数组进行初始化:np.zeros((lengthOfSlices,numberOfTrackedPoints))

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

有没有一种numPythonic方法可以用零初始化数组,然后向量存储?

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

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2014-09-05 19:26:55

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

简单的例子:

代码语言:javascript
复制
>>> 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实现

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25682600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档