我正在研究實時應用程序。爲此,我需要每秒存儲大約20個數組。每個數組由n個具有相應x和y座標的點組成(z可能會在未來出現)。用於n維向量的環形緩衝區
我所做的是一種環形緩衝區,它佔用了總陣列的長度(它是一個視頻btw的幀)和點的數量與它們的座標(這不會改變在一次執行中,但是對於下面的執行是可變的)。
我的緩衝inits填充爲0的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]
好吧,可以說如果我有128幀的視頻和2個跟蹤點乘以x和y的形狀(128,2,2)。我如何正確索引我的計算值? 例如,我得到了類似result = [[236,218],[267,220]]的結果作爲一幀。我不能只索引「self.data [0] = result」,因爲那麼它只會填充數組,但會覆蓋我的數據結構,並以IndexErrors結束。 – emuecke 2014-09-05 12:03:48
你應該可以做self.data [0] =結果,除非你的索引計算是錯誤的,我懷疑(你添加一個整數和一個numpy數組),因此使用collections.deque可能更簡單 – Emilien 2014-09-05 12:18:36