How to save only latest ~10 iterations on for loop
2 次查看(过去 30 天)
显示 更早的评论
I'm trying to run a for loop that will give me a new iteration of a matrix at each time step. The problem comes in because I need to calculate up to 20,000 time steps, but I don't have any where near the memory for that. I'm only interesting in the last ~ 10 time steps. Is there some way to write over or erase the older time steps?
0 个评论
采纳的回答
Geoff Hayes
2014-6-12
编辑:Geoff Hayes
2014-6-12
If you are only interested in the latest 10 matrices, then you can create a "circular" cell array of fixed size that is updated at each iteration, overwriting the older matrices as the code iterates:
circularArraySz = 10;
circularArray = cell(circularArraySz,1); % create the circular cell array
nextIdx = 1; % the index into the array in which
% to insert the next matrix
% do the for loop
for i=1:20000
% do the work to generate the matrix A
% add A to the cell array
circularArray{nextIdx} = A;
% increment to the next index
nextIdx = nextIdx + 1;
% wrap around to the beginning of the circular array if the index
% is greater than circularArraySz
if nextIdx>circularArraySz
nextIdx = 1;
end
end
When the loop ends, circularArray will have the last ten matrices. Try it out and see what happens!
更多回答(1 个)
Azzi Abdelmalek
2014-6-12
look at this example, I'm not sur if it's the best way
a=[];
for k=1:20
a(end+1)=k
a(1:end-10)=[]
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!