Azzera filtri
Azzera filtri

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

2 visualizzazioni (ultimi 30 giorni)
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 Commenti
Stephen23
Stephen23 il 13 Nov 2018
@Native: please do not close threads that have already have answers.
Native
Native il 13 Nov 2018
Modificato: Native il 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! :)

Accedi per commentare.

Risposta accettata

Stephen23
Stephen23 il 13 Nov 2018
Modificato: Stephen23 il 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 Commenti
Stephen23
Stephen23 il 20 Lug 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)

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by