Effacer les filtres
Effacer les filtres

Fast FIFO Array/Other Datatype

37 vues (au cours des 30 derniers jours)
Matthew Mellor
Matthew Mellor le 14 Juin 2016
Modifié(e) : Andrew Ward le 27 Nov 2018
I'm trying to plot something in real time using an FIFO array. I'm implementing the array using the advice someone else here gave me (thank you!) of the following sort:
array = {1,2,3,4};
array = array(2:end)
array{end+1} = 5
Unfortunately this is a bit too slow for what I'm trying to do :(. Could anyone suggest either an efficient FIFO array-like data structure? Or just a faster way?
  2 commentaires
Star Strider
Star Strider le 14 Juin 2016
Adam
Adam le 14 Juin 2016
You could probably also use a containers.Map though I don't know what its speed would be like compared to your approach or Walter's answer which is probably faster since it uses a raw array without memory copying.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 14 Juin 2016
array(1:end-1) = array(2:end);
array{end} = newvalue;
This avoids having to grow the array.
  2 commentaires
Matthew Mellor
Matthew Mellor le 15 Juin 2016
Thanks so much!
Kunle Olutomilayo
Kunle Olutomilayo le 24 Juin 2017
Awesome.

Connectez-vous pour commenter.

Plus de réponses (1)

Andrew  Ward
Andrew Ward le 27 Nov 2018
Modifié(e) : Andrew Ward le 27 Nov 2018
Nmax=50000;
A1=1:Nmax;
Ap=A1;
%%
%Method 1 concatenate array with element - Slow
tic
for i=1:Nmax
A1=[A1(2:end),Nmax+i];
end
toc
%%
%% Method 2 overwite ellemnts followed by a circular shift - Fastest -
% avoids taking a sub portion of the array
% which I think is costly, just replaces the value, 1,2,3,4
% becomes 5,2,3,4, so to get it in order you need to
% do the circular shift at the end.
tic
A2=1:Nmax;
for i=1:Nmax
ic=mod(i,Nmax+1);
A2(ic)=Nmax+i;
end
A2=circshift(A2,-i);
toc
sum(A2~=A1)
%% Method from above, still slow
A3=Ap;
tic
for i=1:Nmax
A3(1:end-1)=A3(2:end);
A3(end)=Nmax+i;
end
toc
sum(A3~=A1);

Catégories

En savoir plus sur Loops and Conditional Statements 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!

Translated by