Clear Filters
Clear Filters

Averaging matrices over time (in for loop)

1 view (last 30 days)
Hi there, I have a code in which, for each timestep of a for loop, a new matrix is being generated (50x1) (not randomly). Within my for loop, I plot the elements of the matrix, I then set each plot figure as a video frame and save each frame to a new video file.
What I want to be able to do is compute the average values of each element for all of the matrices, so that I have an overall time averaged matrix. I want to plot this with the other plots that are being generated with each timestep.
My code looks something like my example below, it does the job, but it is extremely slow due to the two for loops, one for computing the average, the second creates the video file, they're doing the same thing twice though!! I've also had to copmpute the first matrix outside the first for loop, to do this, which is not ideal. Is there a way of doing this in one for loop, mainly to reduce the run time, or any other way of doing this better? Many thanks in advance.
output = function_which_creates_matrix(inputs,1);
output_tot = output;
for k = 2:n
output = function_which_creates_matrix(inputs,k);
output_tot = output_tot + output;
end
output_av = output_tot./length(2:n);
OBJ = VideoWriter('plotvideo.avi')
open(OBJ);
for k = 2:n
output = function_which_creates_matrix(inputs,k);
plot(output_av);
hold on
plot(output)
hold off
currframe = getframe;
writevideo(OBJ,currframe);
end
close(OBJ);

Accepted Answer

José-Luis
José-Luis on 17 Sep 2012
Maybe this could work (counter is not strictly necessary):
counter = 0;
numSteps = 100;
your_average = zeros(50);
for ii = 1:numSteps
your_matrix = rand(50);
your_average = your_average*(counter)./(counter+1) + your_matrix./(counter+1);
counter = counter + 1;
%Do your stuff
end

More Answers (0)

Community Treasure Hunt

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

Start Hunting!