是否有任何动态添加元素并同时删除其中一些元素的方法?最好在MATLAB中。动态添加和删除矢量中的元素
例如,假设我正在传输来自传感器的数据。由于它将永远流动,我只想保留最后一个,例如100个样本/矢量元素。
是否有任何动态添加元素并同时删除其中一些元素的方法?最好在MATLAB中。动态添加和删除矢量中的元素
例如,假设我正在传输来自传感器的数据。由于它将永远流动,我只想保留最后一个,例如100个样本/矢量元素。
有没有正式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。
这种方法的问题是它会很慢。队列或出队的一点是它证明了一种有效的追加数据的方式。但方法要求每次都通过循环复制所有数据(它也可能每次创建一个新数组,我不确定)。这会很慢。对于100个元素的数组可能是可以接受的,但它不会缩放。 – TheBlackCat
您可以尝试Queue
模块中的Python:
from Queue import Queue
q=Queue()
to enque at back : q.put(x)
to deque from front : q.get()
您可以在Python中使用deque
从collections
以及(如果你有一些提前要求):
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()
你的意思是一个德克? – Shasha99
@ Shasha99是的,谷歌搜索这个词,这是我需要的。 –
写了答案。如果您满意,请标记答案。 – Shasha99