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

Adam
Adam 2016년 6월 14일
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.

댓글을 달려면 로그인하십시오.

 채택된 답변

Walter Roberson
Walter Roberson 2016년 6월 14일

2 개 추천

array(1:end-1) = array(2:end);
array{end} = newvalue;
This avoids having to grow the array.

추가 답변 (1개)

Andrew  Ward
Andrew Ward 2018년 11월 27일
편집: Andrew Ward 2018년 11월 27일

1 개 추천

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);

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2016년 6월 14일

편집:

2018년 11월 27일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by