Effacer les filtres
Effacer les filtres

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

2 vues (au cours des 30 derniers jours)
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 commentaires
Stephen23
Stephen23 le 13 Nov 2018
@Native: please do not close threads that have already have answers.
Native
Native le 13 Nov 2018
Modifié(e) : Native le 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! :)

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 13 Nov 2018
Modifié(e) : Stephen23 le 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 commentaires
Stephen23
Stephen23 le 20 Juil 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)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by