How can I get an average of different matrices stored as separate .mat files?

3 views (last 30 days)
I have 24 different matrices of dimension 68X68, stored in a folder. I need to create a new matrix that is an average of all those matrices. Using previous FAQ from this forum, I tried :
Num = 24
for i = 1:Num
files = dir(sprintf('ii_Sub*.mat',i))
for k = 1:length(files)
fprintf('Current file : %s\n', files(k).name)
a = load(files(k).name)
meanmatrix = mean(a,24)
end
end
This is creating a 1X1 struct only, while the mean command shows an error as well. How best can I go about it?
  3 Comments
Native
Native on 13 Nov 2018
Edited: Native on 13 Nov 2018
Sure, I was not aware of that. Closed it thinking that the purpose of the question was solved..
As for your earlier comment, thanks for pointing out the fallacies. I must admit that i have started to know the language of code only for a month now, so work in progress. Hope to learn a lot from this forum! :)

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 13 Nov 2018
Edited: Stephen23 on 13 Nov 2018
Assuming that each file contains exactly one variable (a matrix) and that all matrices are the same size and type:
S = dir('*.mat');
N = numel(S);
C = cell(1,N);
for k = 1:N
T = load(S(k).name)
C(k) = struct2cell(T);
end
M = cat(3,C{:})
mean(M,3)
  9 Comments
Stephen23
Stephen23 on 20 Jul 2021
@João Vítor Batista Pires Santos: you could try something like this:
for k = 1:N
C{k} = ncread(S(k).name,'PRMSL_L101'); % PRMSL_L101 = Pressure (17x17x4)
end
A = cat(4,C{:});
M = mean(A,4)

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!