2016-11-11 99 views
1

是否有任何动态添加元素并同时删除其中一些元素的方法?最好在MATLAB中。动态添加和删除矢量中的元素

例如,假设我正在传输来自传感器的数据。由于它将永远流动,我只想保留最后一个,例如100个样本/矢量元素。

+0

你的意思是一个德克? – Shasha99

+0

@ Shasha99是的,谷歌搜索这个词,这是我需要的。 –

+0

写了答案。如果您满意,请标记答案。 – Shasha99

回答

-1

有没有正式queue数据结构在Matlab中是这样的,但是您所描述的基本情况可以通过巧妙地使用索引来实现,而且很简单:max

d = []; % Allocate empty array 
n = 100; % Max length of buffer/queue 

% A loop example for illustration 
for i = 1:1e3 
    x = rand(1,3);       % Data to append 
    d = [d(max(end-n+1+length(x),1):end) x]; % Append to end, remove from front if needed 
end 

上面假设附加数据x是长度为0到n的行向量。你可以很容易地修改它以追加到前面等等。它也可以变成一个函数。

您还可以在MathWorks File Exchange上找到实现各种形式队列的类,例如this one

+0

这种方法的问题是它会很慢。队列或出队的一点是它证明了一种有效的追加数据的方式。但方法要求每次都通过循环复制所有数据(它也可能每次创建一个新数组,我不确定)。这会很慢。对于100个元素的数组可能是可以接受的,但它不会缩放。 – TheBlackCat

2

您可以尝试Queue模块中的Python:

from Queue import Queue 

q=Queue() 

to enque at back : q.put(x) 
to deque from front : q.get() 

您可以在Python中使用dequecollections以及(如果你有一些提前要求):

from collections import deque 

d = deque([]) 

to enque at back  : d.append(x) 
to enque at front : d.appendleft(x) 
to deque from back : d.pop() 
to deqeue from front : d.popleft()