How can I implement a rolling list ?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Walter Roberson
le 30 Sep 2012
You could also consider
if length(data) == 1000
data(1) = [];
end
data(end+1) = theNewDataValue;
0 commentaires
Plus de réponses (3)
Image Analyst
le 30 Sep 2012
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 commentaires
Malcolm Lidierth
le 30 Sep 2012
Modifié(e) : Malcolm Lidierth
le 30 Sep 2012
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 commentaires
Blake
le 30 Sep 2012
Modifié(e) : Blake
le 30 Sep 2012
1 commentaire
Malcolm Lidierth
le 30 Sep 2012
@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.
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!