How can I implement a rolling list ?
1 次查看(过去 30 天)
显示 更早的评论
I am reading data over the network in real time and I want to limit a dataset to 1000 points. For example when the array has filled 1000 points I want it to start at 1 again to save memory. I also want to ensure I keep the order so that when i plot the information it will plot oldest to newest and not in the way it was stored.
Is there any such feature in MATLAB?
0 个评论
采纳的回答
Walter Roberson
2012-9-30
You could also consider
if length(data) == 1000
data(1) = [];
end
data(end+1) = theNewDataValue;
0 个评论
更多回答(3 个)
Image Analyst
2012-9-30
Something like this perhaps:
% Assign new data to the next element.
data(nextIndexToUse) = theNewDataValue;
% Increment to the next element to use.
nextIndexToUse = nextIndexToUse + 1;
% Reset back to 1 if it exceeds 1000
if nextIndexToUse > 1000
nextIndexToUse = 1;
end
0 个评论
Malcolm Lidierth
2012-9-30
编辑:Malcolm Lidierth
2012-9-30
or
Edited for unity-based indexing as per @Blake's remark below:
x=zeros(1,1000)
circindex=@(k)mod(k-1,numel(x))+1
x(circindex(100001))=1
0 个评论
Blake
2012-9-30
编辑:Blake
2012-9-30
1 个评论
Malcolm Lidierth
2012-9-30
@Blake
I forgot the unity-base in MATLAB. Code corrected above. To extract data with N samples:
x([circindex(N):-1:1 end:-1:circindex(N)+1])
Extra code for N<=0 not included.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!