I have 366 matrices of size 72x144. How can I create a 367th matrix, also size 72x144, which represents the average by element of the original?

1 view (last 30 days)
I asked a similar question last night, but didn't get an answer I understood. To be more specific, I have 366 matrices, each size 72x144, and each representing a day's worth of data, for a total of one year worth of daily data. The file names for the individual matrices are in the format "20040101.txt", "20040102.txt", ... "20040131.txt", "20040201.txt", etc. I would like to create a new 72x144 matrix which represents the average by element of the original 366 matrices. What is the easiest way for me to do that, keeping in mind I know very little about MATLAB.
Last night, I successfully made an average matrix for two separate months, but it took me nearly an hour to do so, because I did it the only way I understood: add all matrices manually and divide by 31, such that:
newMatrix=('20040101.txt'+'20040102.txt'...'20040131.txt')./31
How can I make this simpler? I know there is a better way, but can someone please also explain in detail what the simpler function does (how it operates) rather than just giving me the code?
Thanks,
Patrick

Accepted Answer

Walter Roberson
Walter Roberson on 3 Oct 2013
As you create read the K'th file, store the data into DailyData(:,:,K) . Then to calculate the average of each element over the 366 matrices, use mean(DailyData,3)

More Answers (1)

Kelly Kearney
Kelly Kearney on 3 Oct 2013
To add to Walter's answer, here's a quick way to generate your list of file names, since they're labeled by date rather than a simple sequence of 1-366:
days = datenum(2004,1,1):datenum(2004,12,31);
files = cellstr(datestr(days, 'yyyymmdd.txt'));

Products

Community Treasure Hunt

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

Start Hunting!